考虑派生A类和BaseB类的基类。从BaseB派生的C类。所有分类都继承了非静态变量“ y”,但对于BaseB和C类,“ y”具有相同的值。
我使用以下代码解决了这种情况:

class Base {
    protected:
        int y;
    virtual void registerValue()
        {
        y = 5;
        }

};

class A : public Base {
};

class BaseB : public Base {
    protected:
    static int x;
        virtual void registerValue()
        {
          // Process x ...
          y = x;
        }

};

class C : public BaseB {

};

int BaseB::x = 3;

int main() {}


它可以工作,但是在这种情况下将静态变量分配给非静态变量是否正确?

最佳答案

从语言合法性的角度来看,这样做很好,但这有点奇怪。

大概您不能创建Base::y static,因为那样会干扰A类的行为?

您只需要了解BaseB实例将共享相同的x,但可能具有不同的y值这一事实。那是预期的行为吗?

我个人将考虑在基类中将void registerValue()设为纯虚函数,并期望所有派生类都可以实现该方法,包括实现该方法所需的所有必要存储。也许这也需要基类函数virtual int getRegistedValue() = 0吗?

关于c++ - 将静态变量分配给非静态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40484091/

10-11 18:47