我有一个由所有子类继承的超类。我想在超类中声明一个成员变量,这样如果一个子类更改了该成员变量,那么该成员变量的更改将反映在所有子类以及超类本身中。有没有办法在C ++中这样做。
class superClass1 {
public:
int test;
};
class subclass1 : public superClass1 {
public:
void func()
{
test=10;
cout<<"1. value of test="<<test<<"\n";
}
};
class subclass2: public superClass1 {
public:
void func1()
{
cout<<"2. value of test="<<test<<"\n";
}
};
现在我得到的输出是:
1. value of test=10
2. value of test=1701602675
我的预期输出是:
1. value of test=10
2. value of test=10
虽然我希望两个测试的值相同,但它们会变得不同。是否有某种方法可以修改任何子类中的超类变量,并且该超类变量的值会反映在所有其他子类中。
我使用的gcc编译器的版本为:gcc(Ubuntu / Linaro 4.6.4-6ubuntu2)4.6.4
编辑:我尝试在superClass1中将测试作为statis但是它给了我错误:对`superClass1 :: test'的未定义引用答案 0 :(得分:3)
在基类中将变量声明为static
,如果类本身是在标头中定义的,则在某个cpp.module中定义它。例如
class superClass1{
public:
static int test; // declaration
};
int superClass1::test; // definition
变量将由编译器进行零初始化。如果您希望它由其他值初始化,那么您应该明确指定初始化程序。例如
int superClass1::test = 10;
答案 1 :(得分:1)
将test
成员声明为static
。在这种情况下,它将在所有对象之间共享。