1.2.6 静态成员
C++(www.cppentry.com)还有一种数据成员,称作"静态"成员,静态成员是所有对象公有的。静态成员有静态数据成员和静态函数成员之分。
1. 静态数据成员
静态数据成员的语句格式为:
static 类型说明符 成员名;
关于静态数据成员的使用需注意以下几点:
不管一个类的对象有多少个,其静态数据成员也只有一个,由这些对象所共享,可被任何一个对象访问。
在一个类的对象空间内,不包含静态成员的空间,所以静态成员所占空间不会随着对象的产生而分配,或随着对象的消失而回收。
静态数据成员的存储空间的分配是在程序一开始运行时就被分配,并不是在程序运行过程中在某一函数内分配空间和初始化。
静态数据成员的赋值语句,既不属于任何类,也不属于包括主函数在内的任何函数,静态变量赋初值语句应当写在程序的全局区域中,并且必须指明其数据类型与所属的类名,并用如下格式:
- 类型 类名::变量名 = 值;
【例1.4】静态数据成员的使用(Ex1_04):
- #include <iostream.h>
- class CSum
- {
- public:
- CSum(int a = 0, int b = 0)
- { nSum += a+b; }
- int GetSum()
- { return nSum; }
- void SetSum(int sum)
- { nSum = sum; }
- private:
- static int nSum;
- };
- int CSum::nSum = 0;
-
- void main()
- {
- CSum one(15, 3);
- cout<<"sum = "<<one.GetSum()<<endl;
- one.SetSum(6);
- cout<<"sum = "<<one.GetSum()<<endl;
- }
运行结果为:
- sum = 18
- sum = 6
2.静态函数成员
静态函数成员的定义:
- static 类型 函数名(形参)
- {
- 函数体
- }
与静态数据成员一样,静态函数成员与类相联系,不与类的对象相联系,所以访问静态函数成员时,不需要对象。一个静态函数成员不与任何对象相联系,所以它不能对非静态成员进行默认访问。
【例1.5】静态函数成员的使用(Ex1_05):
- #include <iostream.h>
- class CSum
- {
- public:
- CSum(int a = 0, int b = 0)
- { nSum += a+b; }
- int GetSum()
- { return nSum; }
- void SetSum(int sum)
- { nSum = sum; }
- static void ShowData(CSum one);
- private:
- static int nSum;
- };
- void CSum::ShowData(CSum one)
- {
- cout<<"直接使用静态成员"<<endl;
- cout<<"sum = "<<nSum<<endl;
- cout<<"使用同类的对象"<<endl;
- cout<<"sum = "<<one.GetSum()<<endl;
- }
- int CSum::nSum = 0;
- void main()
- {
- CSum one(10, 2);
- CSum::ShowData(one);
- one.SetSum(9);
- one.ShowData(one);
- }
运行结果为:
- 直接使用静态成员
- sum = 12
- 使用同类的对象
- sum = 12
- 直接使用静态成员
- sum = 9
- 使用同类的对象
- sum = 9
【责任编辑:
云霞 TEL:(010)68476606】