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

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();
时间: 2024-10-12 15:33:22

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

分析java类的静态成员变量初始化先于非静态成员变量

分析java类的静态成员变量初始化先于非静态成员变量 依上图中当class字节码文件被jvm虚拟机加载到内存中依次经过 连接 验证:对字节码进行验证 准备:给静态变量分配内存并赋予变量类型各自的默认值(注:基本类型为0或false,对象为null,static final修饰的常量直接赋予相应的值) 解析:类中符号引用转换成直接引用 初始化:为类的静态变量/静态语句块初始化相应的值 而类的初始化契机是:类在被第一次主动使用的情况下,主动使用包括以下6中情况: 使用new关键字实例化对象时. 调用

[email&#160;protected]类的静态成员变量和静态成员函数

参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html 分析Qt程序时,碰到下面代码. QString str = QString("QFrame#avatar{border-image:url(%1.jpg)}").arg( QString::number(i) );   静态成员变量 静态成员函

类的静态成员变量及函数(二十)

我们正常情况下能通过对象名来访问 public 成员变量,每个对象的成员变量都是专属的,成员变量不能在对象之间共享的.我们现在学了这么长时间的 C++,现在又有了一个新的需求:a> 同级在程序运行期间某个类的对象数目:b> 保证程序的安全性(不能使用全局变量):c> 随时可以获取当前对象的数目. 我们首先想到的是定义一个私有成员变量,然后在构造函数中进行 ++ 操作,在析构函数中进行 -- 操作.我们试着写下程序 #include <stdio.h> class Test {

PHP 类的静态成员变量和普通成员变量对比

有很多人可能弄不清楚,在PHP中类的静态成员变量和普通成员变量有什么区别? 1.类的静态方法只能访问静态成员变量,而不能访问非静态成员变量 2.静态成员变量不需要实例化就能访问,且访问速度快一些 3.类的静态成员变量只属于这个类,但类的所有实例共享这个静态成员变量 一个由 c/c++编译过的程序占用的内存分为一下几个部分 (1).栈区 stack : 由编译器自动分配释放,存放函数的参数值,局部变量的值等.这个栈的操作方式类似于数据结构中的栈.栈区是在程序运行前就会分配好的,速度较堆要快 (2)

第25课 类的静态成员变量

1. 成员变量的回顾 (1)通过对象名能够访问public成员变量 (2)每个对象的成员变量都是专属的 (3)成员变量不能在对象之间共享 2. 静态成员变量 (1)C++中的静态成员变量 ①静态成员变量属于整个类所有 ②静态成员函变量的生命期不依赖于任何对象 ③可以通过对象名,也可以通过类名直接访问公有静态成员变量 ④所有对象共享类的静态成员变量 (2)静态成员变量的特性 ①在定义时直接通过static关键字修饰 ②静态成员变量在程序内部位于全局数据区,所以需要类外为其单独分配空间.(因为new

C++--类的静态成员变量

一.成员变量的回顾 1.通过对象名能够访问public成员变量2.每个对象的成员变量都是专属的 3.成员变量不能在对象之间共享Q:新的需求1.统计在程序运行期间某个类的对象数目2.保证程序的安全性(不能使用全局变量)3.随时可以获取当前对象的数目代码示例 #include <iostream> using namespace std; class Test { private: int mCount; public: Test() : mCount(0) { mCount++; } ~Test

C#中对于变量的声明和初始化

C#变量初始化是C#强调安全性的另一个例子.简单地说,C#编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量.大多数现代编译器把没有初始化标记为警告,但C#编译器把它当作错误来看待. 1.在C#中,变量的声明格式为: 数据类型   变量名; 2.变量的赋值格式为: 变量名 = 数据; 3.一般情况下,都是先声明后赋值,或者在声明变量的同时就赋初值.然而有些时候在程序的开发设计中,往往忘了要赋初值(即进行初始化),这样就会导致在程序的设计中,会出现意想不到的错误. 解释:当我们在声

2.1 变量的声明及初始化

1 //声明变量的同时进行初始化 2 int intVariable = 10; 3 4 //先声明一个变量,然后再初始化 5 string strVariable; 6 strVariable = "Variable"; 7 8 //同时声明多个变量并初始化,其中变量的类型必须一致 9 int intVarialbe1 = 10, intVariable2 = 20, intVariable3 = 30; 10 string strVariable1 = "Variable

3.Java变量的声明、初始化和作用域

一.Java变量的声明 在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明变量的名字.下面演示了变量的声明方式.     double salary;     int age;     Boolean op; 其中第一项称为变量类型,第二项称为变量名.分号是必须的,这是 Java 语句的结束符号. 同一类型的不同变量,可以声明在一行,也可以声明在不同行,如果要声明在同一行中,不同的变量之间用逗号分隔,例如下面的例子.     int st