C++中静态数据成员

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/89738457