AクラスおよびBaseBクラスが派生するBaseクラスについて考えてみましょう。 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() {}
?
なぜそうでないのか分かりません。 – Medinoc
"すべてのクラスは非静的変数" y "を継承しますが、BaseBとCクラス" y "の場合は同じです(これは、値 " - まあ、それらはすべてYの同じ値を持っています。それ以外の場合は別の値に設定します。すなわち、あなたが 'BまたはC :: registerValue'を呼び出すと、あなたはおそらくあなたが望むものではないAの値を変更することになります。 – UKMonkey
UKMonkeyは、クラスAが独自のメンバーyを持つ他のインスタンスを生成することを認識します。 – Ruben