c++中类的private的static变量实现类对象的数据共享

C++中使用静态成员可以实现同一类的不同对象之间共享数据 j。类的普通数据成员在类的每一个对象都有一个拷贝,就是说每个对象的同名数据成员可以分别存储不同数值,这就保证对象拥有自身区别其他对象的特征的需要。静态数据成员是类的数据成员的一种特例,采用static关键字来声明;每个类只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。
例如:

#include <iostream>
using namespace std;
class sample
{
private:
static char m_sArray[10];
public:
       sample(){ cout << "default constructor! "<< endl;}
sample(sample & s){ cout <<"copy constructor! " << endl;}
       void show(void) { cout << m_sArray << endl;}
void input(void) { cin.get(m_sArray, 10);}
};
char sample::m_sArray[10] = "I am a engineer";
int main(void)
{
sample e1;
e1.show();
sample e2(e1);
e2.show();
e2.input();
e1.show();
}

运行结果如下:
default constructor!
I am a engineer
copy constructor!
I am a engineer
this is my job
this is my job

静态成员变量m_sArray确实起到了在不同对象间共享的作用!不过由于其是静态属性,内存是在全局/静态区域开辟的,属于栈内存区,内存大小使用受限。如果能动态从堆中申请内存,则可以使用大内存空间了。
有一学生类:

class engineer
{
Private:
im ID :
char nalne;
static count;//静态数据成员,用来存放“人数”
string name;
}

如果程序中需要统计学生人数,这个数据存放在什么地方呢?若以类外的全局变量来存放,不能实现数据的隐藏,若在类中增加一个数据成员用以存放人数,必然在每一个对象中都存储一副本,这样不仅冗余,而且每个对象分别维护一个“人数”,势必造成数据的不一致性。因此,比较好的方案是在engineer类中增加一个静态数据成员。static count用来存放学生“人数”。

原文:https://blog.csdn.net/fanyun_01/article/details/78145431?utm_source=copy

猜你喜欢

转载自blog.csdn.net/birenxiaofeigg/article/details/83054780