大家都知道所有子类对象(不管是相同的子类或是不同的子类)拥有基类的相同静态成员变量。因为静态变量是属于类的,而不是属于某个对象的。所以如下代码:
#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值也被修改了。可以借助模板的不同具类化解决这个问题,实现代码如下: