1. 程式人生 > >不同子類擁有基類的不同的靜態成員變數的方法

不同子類擁有基類的不同的靜態成員變數的方法

大家都知道所有子類物件(不管是相同的子類或是不同的子類)擁有基類的相同靜態成員變數。因為靜態變數是屬於類的,而不是屬於某個物件的。所以如下程式碼:

#include <iostream>
using namespace std;



class Base
{
public:
static int data;
};

int Base<T>::data = 0;



class Derivd:public Base
{


};



class Derivd2:public Base
{


};


int main()
{
Derivd d;


d.data = 12;


Derivd2 d2;
cout<<d2.data<<endl;
}

這裡d2的data物件和d的data物件其實是同一份,d修改了data的值導致d2中的data值也被修改了。可以藉助模板的不同具類化解決這個問題,實現程式碼如下:

#include <iostream>
using namespace std;


template<typename T>
class Base
{
public:
static int data;
};

template<typename T>
int Base<T>::data = 0;


class Derivd:public Base<Derivd>
{
};

class Derivd2:public Base<Derivd2>
{
};

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


Derivd2 d2;
cout<<d2.data<<endl;

        Derivd d3;
}

這裡基類模板的不同具類化會生成不同的靜態物件,從而使得d和d2各自有各自的靜態資料data。但是任然沒有解決d和d3共用同一份data資料。