[解決済み] 実装を伴う純粋な仮想関数
2022-05-07 12:26:04
質問
私の基本的な理解では、純粋仮想関数の実装はありませんが、純粋仮想関数の実装があるかもしれないと言われました。
class A {
public:
virtual void f() = 0;
};
void A::f() {
cout<<"Test"<<endl;
}
上記のコードに問題はありませんか?
実装を伴う純粋な仮想関数にする目的は何でしょうか?
どのように解決するのですか?
純粋な
virtual
関数は、直接インスタンス化される派生型に実装されなければなりませんが、基本型はまだ実装を定義することができます。派生クラスは、アクセス権が許す限り、完全にスコープされた名前を使って (例えば、"Second" と呼ばれる関数で) ベースクラスの実装を明示的に呼び出すことができます。
A::f()
あなたの例では、もし
A::f()
は
public
または
protected
). のようなものです。
class B : public A {
virtual void f() {
// class B doesn't have anything special to do for f()
// so we'll call A's
// note that A's declaration of f() would have to be public
// or protected to avoid a compile time problem
A::f();
}
};
私が思いつく使用例としては、多かれ少なかれ妥当なデフォルトの動作があり、クラス設計者がそのデフォルトのような動作を明示的にしか呼び出さないことを望んでいる場合です。 また、派生クラスが常に自分自身の作業を行いながら、共通の機能セットを呼び出すことができるようにしたい場合もあります。
なお、この方法は言語で許可されているにもかかわらず、一般的に使われているのを見たことがありません(そして、この方法が可能であるという事実は、経験豊富なプログラマーでさえ、ほとんどのC++プログラマーを驚かせているようです)。
関連
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] プライベートな純粋仮想関数のポイントは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] "抽象的な型のオブジェクトを割り当てることができません "エラー