更改所有子类中的超类变量的值

时间:2015-03-29 14:55:23

标签: c++ inheritance gcc

我有一个由所有子类继承的超类。我想在超类中声明一个成员变量,这样如果一个子类更改了该成员变量,那么该成员变量的更改将反映在所有子类以及超类本身中。有没有办法在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'的未定义引用

2 个答案:

答案 0 :(得分:3)

在基类中将变量声明为static,如果类本身是在标头中定义的,则在某个cpp.module中定义它。例如

class superClass1{
public:
 static int test; // declaration
};

int superClass1::test; // definition

变量将由编译器进行零初始化。如果您希望它由其他值初始化,那么您应该明确指定初始化程序。例如

int superClass1::test = 10;

答案 1 :(得分:1)

test成员声明为static。在这种情况下,它将在所有对象之间共享。