考虑派生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/