重複の可能性:
サブクラス化時に静的変数をオーバーライドする
基本クラスから派生した一連のクラスがあります。これらの派生クラスはいずれも、同じ静的変数を宣言します。ただし、派生クラスのそれぞれに固有です。
次のコードを検討してください。
class Base {
// TODO: somehow declare a "virtual" static variable here?
bool foo(int y) {
return x > y; // error: ‘x’ was not declared in this scope
}
};
class A : public Base {
static int x;
};
class B : public Base {
static int x;
};
class C : public Base {
static int x;
};
int A::x = 1;
int B::x = 3;
int C::x = 5;
int main() {}
私の基本クラスでは、派生クラス固有の知識が必要なロジックを実装したいと考えていましたx
。どの派生クラスにもこの変数があります。したがって、この変数を基本クラスのスコープで参照できるようにしたいと考えています。
単純なメンバー変数であれば、これは問題になりません。ただし、意味的には、変数は実際には派生クラスのインスタンスのプロパティではなく、派生クラス自体のプロパティです。したがって、静的変数にする必要があります。
更新ポリモーフィックな性質を維持するには、クラス階層が必要です。つまり、すべての派生クラスのインスタンスは、共通の基本クラスのメンバーである必要があります。
ただし、基本クラスのメソッドからこの変数を取得するにはどうすればよいでしょうか?