仮想関数とは、基本クラスで仮想として宣言され、1 つ以上の派生クラスで再定義されたメンバー関数、つまり、virtual キーワードによって変更されたメンバー関数を指します。形式は「仮想関数」です。 type 関数名(パラメータリスト) {関数本体}"。
基本クラスで仮想として宣言され、1 つ以上の派生クラスで再定義されたメンバー関数。使用形式は次のとおりです。 virtual 関数の戻り値の型 関数name (パラメーター リスト) {関数本体}
; ポリモーフィズムを実現するには、基本クラス ポインターまたは派生クラスを指す参照を通じて、派生クラス内の同じ名前のオーバーライド メンバー関数にアクセスします。
簡単に言えば、virtual キーワードによって変更されたメンバー関数は仮想関数です。
まず第一に、関数を仮想関数として定義することは、その関数が実装されていない関数であることを意味するわけではないという概念を強調してください。仮想関数として定義され、基底クラスのポインタを使用してサブクラスの関数を呼び出すことができます。関数を純粋仮想関数として定義することは、その関数が実装されていないことを意味します。純粋仮想関数を定義する目的は、インターフェイスを実装して仕様として機能することであり、このクラスを継承するプログラマはこの関数を実装する必要があります。
例:
class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B:public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0; }
この例は、仮想関数の典型的なアプリケーションです。この例を通じて、仮想関数に関するいくつかの概念を理解できるかもしれません。これは、いわゆる「遅延バインディング」または「動的バインディング」に基づいており、クラス関数の呼び出しはコンパイル時ではなく、実行時に決定されます。コードを作成するときには、呼び出される関数が基本クラスの関数であるか派生クラスの関数であるかを判断できないため、この関数は「仮想」関数と呼ばれます。仮想関数は、ポインターまたは参照を使用した場合にのみポリモーフィックな効果を実現できます。
以上が仮想関数とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。