夏天/isummer

Sun of my life !Talk is cheap, Show me the code! 追风赶月莫停留,平芜尽处是春山~

博客园 首页 新随笔 联系 管理

类的静态成员变量的声明与初始化问题总结

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();

 

posted on 2016-07-14 03:44  夏天/isummer  阅读(3987)  评论(0编辑  收藏  举报