基本クラスの純粋仮想関数を置き換えるメソッドを宣言する必要がありますか?もしそうなら、なぜですか?基本クラスはメソッドを純粋な仮想として宣言しているため、派生クラスに存在する必要があるため、クラス定義の外部でメソッドを実装する前に、派生クラスでメソッドを再宣言する必要はありません。同意しませんか?
3 に答える
はいあなたが持っています。
これは、派生クラスも抽象で仮想メソッドを持つことができるため、仮想メソッドが派生クラスによって実装されていることをコンパイラに通知するためです。コンパイルユニットは個別にコンパイルされるため、コンパイラは、派生calsを使用する別のコンパイルユニットをコンパイルするときに、仮想メソッドが派生クラスによって実装されているかどうか、つまり抽象クラスであるかどうかを認識しません。
基本クラスの宣言をオーバーライドする必要はありません。そうでない場合、派生クラスも単純に抽象化されます。
したがって、派生クラスの宣言は明確な目的を果たし、それが必要です。
名前が示すように、クラス定義はクラスの宣言です。(純粋な仮想関数からの)派生関数を宣言していない場合、コンパイラーはそれを検出しません。
クラスがインスタンス化される場合にのみ、純粋仮想関数を導出する必要があります。純粋仮想関数をクラスA、クラスAから継承するが派生関数を持たないクラスB、および派生関数を再実装してクラスBから継承するクラスCを設定できます。その場合、インスタンス化できるのはクラスCだけですが、なぜコンパイラはクラスBに派生クラスの宣言を追加する必要があるのでしょうか。そのため、どのクラスが純粋仮想関数を再実装しているかをコンパイラーに指定する必要があります。