静态数据成员只能在类体外,且通过函数体进行初始化(静态数据成员是在程序编译时被分配空间的)
来源:互联网 发布:橘猫为什么胖 知乎 编辑:程序博客网 时间:2024/05/16 04:37
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){} //错误
静态成员与对象无关,属于整个类,构造函数是构造某个具体的对象。创建一个对象的时候会用到初始化表,但是静态成员在对象创建之前就已经存在了,所以不需要再初始化表中初始化。
- 静态数据成员只能在类体外,且通过函数体进行初始化(静态数据成员是在程序编译时被分配空间的)
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- C++静态整型成员数据在类内初始化
- 静态成员(静态成员函数,静态数据成员)的特性
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
- 类中静态的方法、成员函数只能访问静态的数据成员或者静态的方法
- 类的静态数据成员和静态成员函数浅析
- 类的静态数据成员和静态成员函数
- 类的静态成员函数和静态数据成员
- 类的静态成员函数和静态数据成员
- 类成员函数参数为该类某个静态成员函数指针,需要在静态函数内使用当前实例的非静态数据成员
- keypad 按键响应流程解析
- What is the difference between Terminal, Console, Shell, and Command Line?
- spring-boot 加入拦截器Interceptor
- adnroid TabLayout 字不显示 的问题
- STM32 -- 笔记一 -- CLK、GPIO、PWM
- 静态数据成员只能在类体外,且通过函数体进行初始化(静态数据成员是在程序编译时被分配空间的)
- ubuntu下ijkplayer的编译
- 网络socket编程指南
- Jquery 解决移动端onclick事件300ms延迟问题
- 谈谈从库函数API和C代码中嵌入汇编两种方式来实现系统调用
- 一探前端开发中的JS调试技巧
- MAC地址
- java 的一些常用方法
- boost的函数:is_sorted、is_sorted_until、is_increasing(decreasing)、is_strictly_increasing(decreasing)