ホームページ >バックエンド開発 >C++ >C の仮想関数と純粋仮想関数の違いは何ですか?

C の仮想関数と純粋仮想関数の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 03:18:12203ブラウズ

What's the Difference Between Virtual and Pure Virtual Functions in C  ?

仮想関数と純粋仮想関数

オブジェクト指向プログラミングでは、仮想関数と純粋仮想関数はポリモーフィズムを理解するために不可欠な概念です。

バーチャルとはFunction?

仮想関数は、動的ディスパッチを可能にする基本クラスの継承可能およびオーバーライド可能な関数です。仮想関数がオブジェクトで呼び出されるとき、ランタイム システムは、オブジェクトの型に基づいて実行する実際の関数実装を決定します。

例:

class Base {
public:
    virtual void foo() { std::cout << "Base::foo()" << std::endl; }
};

class Derived : public Base {
public:
    void foo() override { std::cout << "Derived::foo()" << std::endl; }
};

Inこの例では、Base クラスと派生クラスの両方が foo() 関数を実装しています。 Derived オブジェクトで foo() が呼び出されると、オーバーライドされたバージョンが実行され、「Derived::foo()」が出力されます。

純粋仮想関数とは何ですか?

純粋仮想関数は抽象関数とも呼ばれ、基本クラスで定義されていない仮想関数です。これはプレースホルダーとして機能し、派生クラスで実装する必要があります。

例:

class Base {
public:
    virtual void foo() = 0; // pure virtual function
};

この例では、foo() を Base 内の純粋な仮想関数として宣言します。クラス。派生クラスは、定義を提供するためにこの関数を実装する必要があります。そうしないと、派生クラスは抽象になり、インスタンス化できなくなります。

仮想関数と純粋仮想関数の違い

  • 仮想関数はオーバーライドおよびカスタマイズ可能派生クラス内にありますが、基本クラスにデフォルトの実装があります。
  • 純粋な仮想関数には基本クラスに実装がありません。
  • 純粋仮想関数は基本クラスを強制的に抽象クラスにします (つまり、直接インスタンス化できません)。
  • 仮想関数を使用してポリモーフィズムを実装できます。異なる派生クラスのオブジェクトは、同じ関数呼び出しに応答するときに異なる動作をします。
  • 純粋な仮想関数は、基本クラスと派生クラスの間のコントラクトを強制し、実装が確実に行われるようにします。すべての非抽象派生クラスに存在します。

以上がC の仮想関数と純粋仮想関数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。