【总结】C++静态成员变量的特性总结及测试用例
2016-03-07 23:17
459 查看
静态成员变量存放于数据段,在编译时产生,故有以下特性:
静态成员变量实际为类域中的全局变量,其初始化也应与全局变量一样,不能再头文件里初始化,应与全局变量初始化的方式一样,初始化时,静态成员变量不收访问限定符限定
静态成员变量具有常量性,可以成为成员类的可选参数,普通成员变量不具有常量性,所以不能作为成员函数的可选参数
由于静态成员变量定义不在类体内,所以静态数据成员的值在const成员函数中可以被合法的改变。
静态成员变量实际为类域中的全局变量,其初始化也应与全局变量一样,不能再头文件里初始化,应与全局变量初始化的方式一样,初始化时,静态成员变量不收访问限定符限定
Test.cpp: class A { static int _num; }; int A::_num = 0;//初始化成功静态成员变量被类内所有成员变量共享,也被派生类所有成员变量共享
class B :public A { }; int main() { A a; a._num++; B b; b._num++; cout << "b._num:" << b._num << endl; cout << "a._num:" << a._num << endl; return 0; }
静态成员变量具有常量性,可以成为成员类的可选参数,普通成员变量不具有常量性,所以不能作为成员函数的可选参数
class B :public A { public: void fun(int a = _num)//正确 { } void fun1(int a = num)//报错 { } private: int num; };静态成员变量可以声明为所属类类型,铺同成员变量不可以声明为所属类类型,只能声明为所属类类型的引用与指针(节点就是这么来的)
class B :public A { public: void fun(int a = _num)//正确 { } void fun1(int a = num)//报错 { } private: int num; static B _bclass;//正确 B _b1class;//错误 B* _bclassptr;//正确,为一指针 B &_b2class;//错误,为一引用 };
由于静态成员变量定义不在类体内,所以静态数据成员的值在const成员函数中可以被合法的改变。
class A { public: static int _num; }; int A::_num = 0;//初始化成功 class B :public A { public: void fun()const { _num++;//正确,const函数可以改变静态成员变量 } private: int num; };
相关文章推荐
- C++中const的用法详细总结
- C++中的const和constexpr详解
- C++ 中const和复合类型
- c++中const的使用详解
- C语言基础知识点解析(extern,static,typedef,const)
- c++ 尽量不要使用#define 而是用const、enum、inline替换。
- php面向对象全攻略 (十) final static const关键字的使用
- c#.net中const和readonly的区别
- C++中const的实现机制深入分析
- 解析C语言中如何正确使用const
- C/C++中static,const,inline三种关键字详细总结
- C++ 中const 类型限定符不兼容问题
- C++ const修饰变量和修饰函数介绍
- C++类中的static和const用法实例教程
- ASP.NET中readonly与const的区别详解
- 浅谈c#中const与readonly区别
- C#中const用法详解
- 深入探讨C#中的const、readonly关键字
- C#基础知识系列八const和readonly关键字详细介绍
- C++中const的实现细节介绍(C,C#同理)