静态数据成员只能在类体外,且通过函数体进行初始化(静态数据成员是在程序编译时被分配空间的)
2017-03-09 10:30
344 查看
1 静态数据成员不能用参数初始化表对静态数据成员初始化
(1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。
(2) 静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放(一般数据成员是在对象建立时分配空间,在对象撤销时释放)。静态数据成员是在程序编译时被分配空间的,至程序结束时才释放空间。
(3) 静态数据成员可以初始化,但只能在类体外进行初始化。
注意:静态数据成员不能用参数初始化表对其初始化。如在定义Box类中这样定义构造函数是错误的:Box(int h, int w, int len):height(h){}
(4) 静态数据成员可以通过对象名引用,也可以通过类名引用。
—《C++面向对象程序设计(第2版)》P104-P105
分析:静态数据成员可以初始化,但只能在类体外初始化,并且不能用参数初始化表对其初始化。
如: class Box
{
public:
int volume();
private:
static int height;
int width;
int length
};
int Box::height = 10; //正确
Box(inth, int w, int len):height(h){} //错误
静态成员与对象无关,属于整个类,构造函数是构造某个具体的对象。创建一个对象的时候会用到初始化表,但是静态成员在对象创建之前就已经存在了,所以不需要再初始化表中初始化。
(1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。
(2) 静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放(一般数据成员是在对象建立时分配空间,在对象撤销时释放)。静态数据成员是在程序编译时被分配空间的,至程序结束时才释放空间。
(3) 静态数据成员可以初始化,但只能在类体外进行初始化。
注意:静态数据成员不能用参数初始化表对其初始化。如在定义Box类中这样定义构造函数是错误的:Box(int h, int w, int len):height(h){}
(4) 静态数据成员可以通过对象名引用,也可以通过类名引用。
—《C++面向对象程序设计(第2版)》P104-P105
分析:静态数据成员可以初始化,但只能在类体外初始化,并且不能用参数初始化表对其初始化。
如: class Box
{
public:
int volume();
private:
static int height;
int width;
int length
};
int Box::height = 10; //正确
Box(inth, int w, int len):height(h){} //错误
静态成员与对象无关,属于整个类,构造函数是构造某个具体的对象。创建一个对象的时候会用到初始化表,但是静态成员在对象创建之前就已经存在了,所以不需要再初始化表中初始化。
相关文章推荐
- c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,该类实例只占用一个字节空间
- 静态数据成员的初始化 程序改错
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- C++ 常量数据成员、静态数据成员、常量静态数据成员的初始化
- 只有静态常量整型数据成员才能在类定义中初始化
- C++程序 证明类的数据成员的内存分配是独立的 ,成员函数是共享的
- 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成
- C++中复杂静态数据成员的初始化
- c++中什么类型的成员变量只能在构造函数的初始化列表中进行
- 制作程序文档_主函数_静态代码块_对象的初始化过程_对象调用成员过程
- 静态成员数据 静态对象初始化 .
- 16. 非整数类型的静态数据成员的初始化错误
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- 类中静态的方法、成员函数只能访问静态的数据成员或者静态的方法
- 通过指针访问类的静态数据成员
- 类的静态数据成员的声明、初始化及使用
- OpenCV Mat 只能用静态数组定义时初始化,动态数组赋值给Mat需要逐元素进行. MATLAB,OpenCV,VS混合编程
- 全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题