虚関数と純虚関数(C++とJava虚関数の違い)の深さ分析


c++虚数関数1.定義:ベースクラスでvirtualとして宣言し、1つまたは複数の派生クラスで再定義されたメンバー関数[1]2.文法:virtual関数はタイプ関数名(パラメータテーブル){関数体}3.用途:多形性を実現し、派生クラスのベースポインタを指すことにより、派生クラスの同名のカバーメンバー関数にアクセスします。つまり、子類overrideの父親類の同名を許可する方法です。虚関数の役割は動的な結合を実現することであり、つまりプログラムの実行段階で適切なメンバー関数を動的に選択し、虚関数を定義した後、基本クラスの派生クラスで虚関数を再定義することができ、派生クラスで再定義される関数は虚関数と同じ形参個数と形参タイプを持つべきである。関数名だけが同じではありません。)統一インターフェースを実現するために、異なる定義プロセスを実行します。派生クラスにおいて虚数関数の再定義がない場合は、その基底クラスの虚数関数を継承する。
プログラムが虚関数名の前のキーワードvirtualを発見すると、自動的に動的プログラミング処理として、すなわちプログラム実行時に適切なメンバー関数を動的に選択します。虚数関数はC+++多状態の表現である。ダイナミックコンパイルでは、ベースクラスのポインタまたはベースオブジェクトへの参照によってのみ、虚関数を呼び出すことができます。フォーマット:1.ベースクラスのポインタ変数名->虚関数名(実参照表)2.ベースオブジェクトの参照名.虚関数名(実参照表)は虚関数を使用して、動的に柔軟に結合できます。もちろん、一定のオーバーヘッドを代価としています。親の関数(方法)が必要でない、あるいは実現できない、完全にサブクラスに依存して実現されるなら、この関数をvirtual関数名=0に設定してもいいです。例えば、virtual void fun()=0という関数を純粋虚関数と呼びます。一つのクラスに純虚数関数が含まれている場合、このようなものを抽象類と呼びます。まとめ:もし一つのサブクラスが父親の方法を書き換えたいなら、父類のこのメンバー方法はvirtualでなければなりません。つまりこの方法は虚関数でなければなりません。
javaはjavaの中で、すべての方法はデフォルトでバーチャルです。方法がfinalタイプであると宣言しない限り、間違いなく虚関数です。方法のためにvirtualとして声明する必要はありません。「In Java,You dot need to declare a method as virtual.Dynamic binding is the default behavior.If you dot want a method to be virtual,you it final」という本があります。だから、私たちはJavaでは、子類が父類の方法を書き換えることができますが、父類はvirtualを宣言していません。