C++ 静态数据成员

您所在的位置:网站首页 什么是类名天体 C++ 静态数据成员

C++ 静态数据成员

2024-07-09 16:21| 来源: 网络整理| 查看: 265

一. 定义和性质 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