关于C++类中的静态数据成员

先上代码:

#include<iostream>
using namespace std;

class A
{
public:
static int a;

};
int A::a; //必须在类外再次定义,否则要报错
int main()
{
A a1;
A a2;
cout << a1.a << endl;
a1.a++;
cout << a1.a << endl;
a2.a++;
cout << a2.a << endl;
cout << a1.a << endl;
return 0;
}

输出 0 - 1 - 2 - 2

以上说明了类中的静态成员,该类的对象均可以改变,所有对象共享该静态成员数据;

而且对于类中的静态成员,一定还要再类外定义

C++中类当中的静态成员实际上可以当做全局变量来使用,特别是在C++多文件工程中,采用一个公有的类,可以将数据public封装,达到全局变量的效果,从而在不同的文件之中可以共享数据成员

而避免了将全局变放在一个cpp或头文件中所引发的一系列bug

****************************分界线*******************************************************************

先上代码

#include<iostream>
using namespace std;

class A
{
public:
static int a;

};
int A::a; //必须在类外再次定义,否则要报错

class B:public A //继承与A后就不需要再在类外额外的定义该静态成员了
{

};

class C:public A
{

};
int main()
{
A aa;
B b;
C c;
cout << b.a << endl;
c.a++;
cout << c.a << endl;
cout << b.a << endl;//检验B对象中继承来的静态a是否增加了,结果输出了1,说明B和C也是共享的父类的静态成员
cout << aa.a << endl;//父类的a也增加了,说明三个类共享该静态数据成员
aa.a++;
//一下说明了任何一个类(父类,子类的自增)都会引起整个a的自增,说明三个类共享a
cout << aa.a << endl;
cout << b.a << endl;
cout << c.a << endl;
return 0;
}

以上程序说明了,对于类中的静态数据成员,不管是父类还是子类的对象都共享同一个

原文地址:https://www.cnblogs.com/Con-Tch-LLYF/p/6591129.html