不同类如何共享同一个变量
我需要共享一个复杂的变量
基类:
class A
{
static struct Map{
//.....多个变量
}map[4][4]; //需要共享这个
}
如何在其子类中共享它。
我试过了简单的变量类型如:int ,在基类中初始化,在子类中是能共享的,但这个复杂的怎么弄?
[解决办法]
如果一定要把Map定义在CAnimal内部,那就这样写:
class CAnimal{public: static struct Map { int a; string type; bool on; }map[400][400]; static void setMap();};CAnimal::Map CAnimal::map[400][400];void CAnimal::setMap(){ for (int i=0;i<400;++i) for (int j=0;j<400;++j) { map[i][j].a=0; map[i][j].type=""; map[i][j].on=true; }}int main(){ CAnimal::setMap(); return 0;}
[解决办法]
楼主,其实你这个问题没有描述的很清楚,你的意思是一个父类A,之后两个子类B和C,B和C共享父类的一个成员吗 ?
在不知道你意思的情况下我有这个建议,两种方法完成共享:
1.利用组合而非继承,B类和C类存同一个A的指针,完成共享
2.3楼正解了,单件模式,A类可以类似的这样写,B和C只需要在使用时调用A::Instance()就可以了
class A
{
public:
static A *Instance(){
if (NULL == m_pA) {
m_pA = new A;
}
return m_pA;
}
private:
A(){m_pA = NULL;}
~A();
private:
static A *m_pA;
}