标签:
类的静态成员变量的声明与初始化问题总结
1. 类的静态成员变量的声明原则:
在.H文件中,用static 关键字进行前缀修饰即可,不可以直接进行初始化,基础变量除外。
如果要初始化自定义的类型,则需要在CPP文件中进行初始化
static CPerson* Police;
1 //定义状态环境类 2 /* 3 环境状态类: 4 1. 封装状态静态常量 5 2. 聚合状态 6 3. 提供上层接口 7 */ 8 class CStateContex : public CIState 9 { 10 public: 11 CStateContex(CAbsState* pState = nullptr) 12 { 13 if (!pState) 14 pState = _STATE_OPEN_;//默认门打开状态 15 m_pState = pState;//无默认值行为 16 } 17 ~CStateContex() 18 { 19 //类的静态成员的堆分配是和类一起进行销毁的 20 } 21 public: 22 void openDoor() override 23 { 24 cout << "...不响应..." << endl; 25 } 26 void closeDoor() override 27 { 28 cout << "...不响应..." << endl; 29 } 30 void moveRunning() override 31 { 32 cout << "...不响应..." << endl; 33 } 34 void stopRunning() override 35 { 36 cout << "...不响应..." << endl; 37 } 38 CAbsState* getState() 39 { 40 return m_pState; 41 } 42 //修改当前状态的,要更新被修改状态当前的环境对象,因为环境类中的状态对象中的环境属性需要及时更新 43 void setState(CAbsState* p) 44 { 45 m_pState = p; 46 m_pState->setContex(this); 47 } 48 public: 49 static CAbsState* _STATE_OPEN_; 50 static CAbsState* _STATE_CLOSE; 51 static CAbsState* _STATE_RUN; 52 static CAbsState* _STATE_STOP; 53 private: 54 CAbsState* m_pState; 55 56 };
2.类的静态成员变量初始化原则:
在CPP文件中进行初始化,且格式如下:
类型 所在类::静态变量名 = 初始化值。
1 #include "StateDef.h" 2 3 //类的静态成员的初始化,不能再类的声明中进行 4 CAbsState* CStateContex::_STATE_OPEN_ = new CStateOpenning(); 5 CAbsState* CStateContex::_STATE_CLOSE = new CStateClosing(); 6 CAbsState* CStateContex::_STATE_RUN = new CStateRunning(); 7 CAbsState* CStateContex::_STATE_STOP = new CStateStopping();
标签:
原文地址:http://www.cnblogs.com/icmzn/p/5668862.html