C++ 静态数据成员 |
您所在的位置:网站首页 › 什么是类名天体 › C++ 静态数据成员 |
一. 定义和性质
1. 定义
类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中(而是在相应的cpp文件中)。
//xxx.h文件
class base{
private:
static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。
};
//xxx.cpp文件
const int base::_i=10; // 定义(初始化)时不受private和protected访问限制
2. 性质 和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。C++静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。 C++静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。 class base{ public : static int _staticVar; int _var; void foo1(int i=_staticVar);//正确,_staticVar为静态数据成员 void foo2(int i=_var);//错误,_var为普通数据成员 }; C++静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。 class base{ public : static base _object1;//正确,静态数据成员 base _object2;//错误 base *pObject;//正确,指针 base &mObject;//正确,引用 }; 二. 为什么需要静态数据成员 不像全局变量,静态数据成员/成员函数保存了类的封装性。静态数据成员/成员函数相关于类,与对象的存毁无关。 通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。 但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。 静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。 参考文章: C++静态数据成员定义及应用浅谈 C++静态数据成员存在的意义 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |