不同子类拥有基类的不同的静态成员变量的方法

大家都知道所有子类对象(不管是相同的子类或是不同的子类)拥有基类的相同静态成员变量。因为静态变量是属于类的,而不是属于某个对象的。所以如下代码:

#include
using namespace std;



class Base
{
public:
static int data;
};

int Base::data = 0;



class Derivd:public Base
{


};



class Derivd2:public Base
{


};


int main()
{
Derivd d;


d.data = 12;


Derivd2 d2;
cout< }


这里d2的data对象和d的data对象其实是同一份,d修改了data的值导致d2中的data值也被修改了。可以借助模板的不同具类化解决这个问题,实现代码如下:



#include
using namespace std;


template
class Base
{
public:
static int data;
};

template
int Base::data = 0;


class Derivd:public Base
{
};

class Derivd2:public Base
{
};

int main()
{
Derivd d;
d.data = 12;


Derivd2 d2;
cout<

        Derivd d3;
}


这里基类模板的不同具类化会生成不同的静态对象,从而使得d和d2各自有各自的静态数据data。但是任然没有解决d和d3共用同一份data数据。

你可能感兴趣的:(C++)