ホームページ > バックエンド開発 > C++ > C の純粋仮想関数は実装できますか?なぜ実装するのでしょうか?

C の純粋仮想関数は実装できますか?なぜ実装するのでしょうか?

Mary-Kate Olsen
リリース: 2024-12-18 04:11:09
オリジナル
716 人が閲覧しました

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

純粋仮想関数: 実装と目的

C では、純粋仮想関数は通常、実装を提供せずにメソッドのインターフェイスを宣言することに関連付けられます。ただし、以下に示すように、実装を使用して純粋な仮想関数を使用することは可能です。

class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout << "Test" << endl;
}
ログイン後にコピー

このコードは構文的には有効ですが、その目的と使用法についてはさらなる説明が必要です。

純粋な仮想関数の実装を提供する目的:

基本クラスは、派生クラスが独自の実装を提供する必要がある場合でも、純粋仮想関数の実装。この実装の目的は次のとおりです。

  • デフォルトの動作: 派生クラスが継承できるデフォルトの動作を提供します。ただし、派生クラスは、このデフォルトの動作を利用するには A::f() を明示的に呼び出す必要があります。
  • 共通機能: すべての派生クラスで再利用できる共通の機能セットを定義します。基本クラスで実装を提供することにより、派生クラスは独自のカスタマイズとともにこの共通機能をオプションで呼び出すことができます。

基本クラス実装の呼び出し方法:

派生クラスは、フルスコープの関数を使用して純粋な仮想関数の基本クラス実装を呼び出すことができます。名前:

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 の純粋仮想関数は実装できますか?なぜ実装するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート