[解決済み] すべての仮想関数は派生クラスで実装する必要がありますか?
質問
簡単な質問のようですが、どこにも答えが見当たりません。
次のようなものがあるとします。
class Abstract {
public:
virtual void foo() = 0;
virtual void bar();
}
class Derived : Abstract {
public:
virtual void foo();
}
Derivedクラスがbar()関数を実装していないのは問題ないでしょうか? 派生クラスのすべてがbar()関数を必要としないが、いくつかは必要とする場合はどうでしょう。 抽象的な基底クラスのすべての仮想関数が派生クラスで実装される必要があるのでしょうか、それとも純粋な仮想関数だけなのでしょうか? ありがとうございます。
どのように解決するのですか?
派生クラスは
ではなく
を実装しなければなりません。
すべて
仮想関数を実装する必要があります。実装する必要があるのは
純粋な
のものだけを実装すればよいのです。
1
ということは
Derived
のクラスは正しいということです。それは
を継承しています。
は
bar
の実装を祖先のクラスから継承します。
Abstract
. (これは
Abstract::bar
はどこかで実装されているものとします。問題のコードではメソッドを宣言していますが、定義していません。インラインで定義するには
トレンキさんの回答
が示すように、インラインで定義することもできますし、別々に定義することもできます)。
1 そしてその場合でも、派生クラスが インスタンス化される . 派生クラスが直接インスタンス化されず、より多くの派生クラスの基底クラスとしてのみ存在する場合、そのクラスは それら クラスのすべての純粋仮想メソッドを実装する責任があります。階層の中間に位置するクラスは、基底クラスと同様に、いくつかの純粋仮想メソッドを未実装のままにしておくことが許されています。もし、"middle" クラスが が を実装している場合、その子孫はその実装を継承するので、彼ら自身がそれを再実装する必要はありません。
関連
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] C++の継承 - アクセス不能なベース?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] Pythonで子クラスから親クラスのメソッドを呼び出すにはどうすればよいですか?
-
[解決済み】派生クラスでオーバーライドされた関数が、ベースクラスの他のオーバーロードを隠してしまうのはなぜですか?
-
[解決済み] なぜC++では純粋仮想デストラクタが必要なのでしょうか?
-
[解決済み] 仮想関数とパフォーマンス - C++
-
[解決済み] 仮想関数とvtableはどのように実装されているのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】'cout'は型名ではない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された