以下を検討してください。
struct A {
static const int X = 1;
static void printX() {std::cout << "X " << X << std::endl; };
};
struct B: public A {
static const int X = 2;
};
int main(argc argv){
B b;
b.printX();
}
強制的にb.printX()
値 2 を出力する方法は?
定数とメソッドの両方が静的でなければなりません。したがって、仮想メソッドは適していません。
私の仕事を私よりもよく知っていると思っていて、私がそれを再考するのを見たいと思っている人のために、私の努力の目標を説明します:)
静的定数のセットに基づいた動作を持つクラスを想像してみてください。異なる定数セットを使用して子クラスを実装し、したがって異なる動作を行う最も簡単な方法は、特定の定数値セットを使用して前のクラスからクラスを派生させることです。仮想関数を使用してそのタスクを解決することができます。当然のことながら、疑いの余地はありません。しかし、この解決策は、モデル化されたエンティティの理論に一致するという意味ではあまり純粋ではありません。この場合の仮想メソッドの使用は、正しい実装よりもトリックになります。
たとえば、IR チャネルでは、パルス持続時間とパッケージ構造のタイミングが異なります。特定の定数値のセットを使用して子クラスのセット (さまざまな IR チャネルの実装) を定義すると便利です。その値は、コンパイル時にのみ必要になるため、class および const のすべてのオブジェクトに共通であるため、静的です。また、基本クラスと子クラスの内部実装はわずかに異なるため、それらの間の最適な関係はsuper class - child class
.
私の元の質問の根拠は今ですか?