版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/89738457
一 点睛
类的静态数据成员都有着单一的存储空间,所以存储空间必须定义在一个单一的地方。如果一个静态数据成员被声明而没有被定义,链接器会报告一个错误“定义必须出现在类的外部而且只能定义一次”。因此静态数据成员的声明通常会放在一个类的实现文件中。
xxx.h 类型文件
class base{
public:
static int var; //声明静态数据成员
};
xxx.cpp 类型文件
int base::var=10 //定义静态数据成员,不必在初始化语句里加static
在头文件中定义静态成员容易引起重复定义的错误,比如这个头文件同时被多个cpp文件所包含的时候。
C++静态数据成员被类的所有对象所共享,包括该类的派生类的对象。派生类对象和基类对象共享基类的静态数据成员。静态数据成员在内存中只占一份空间。如果改成它的值,则在各个对象中这个数据成员的值同时都改变了,这样可以节省空间,提高效率。
二 实战
1 代码
#include<iostream>
using namespace std;
class Base{
public:
static int var;
};
int Base::var=10;
class Derived:public Base{
};
int main(){
Base base1;
base1.var++;//通过对象名引用
cout<<base1.var<<endl;//输出11
Base base2;
base2.var++;
cout<<base2.var<<endl;//输出12
Derived derived1;
derived1.var++;
cout<<derived1.var<<endl;//输出13
Base::var++;//通过类名引用
cout<<derived1.var<<endl;//输出14
return 0;
}
2 运行
[root@localhost charpter02]# g++ 0212.cpp -o 0212
[root@localhost charpter02]# ./0212
11
12
13
14