ポリモーフィズムを実現するためのC ++仮想関数、一般的な問題の要約



C Virtual Function Achieve Polymorphism



ポリモーフィズムの要約を実現するためのC ++仮想関数

1.仮想を使用する場合は、メンバー関数の宣言に仮想を追加するだけで、メンバー関数の実装に仮想を追加しないでください。例は次のとおりです。

父.h



class Father{ public: virtual int val() }

Father.cpp

int Father::val(){ //... }

2.サブクラスの仮想関数を書き直す場合は、読み取りとトラブルシューティングを容易にするために、仮想関数とオーバーライドを追加することをお勧めします。
注:仮想関数を書き換える場合、関数プロトタイプは一貫している必要があります。基本クラスがint型の場合、サブクラスを書き換えるときは、サブクラスもint型である必要があります。
父.h



class Father{ public: virtual int val() }

Son.h

class Son:public Father{ public: virtual int val() override }

彼らは.cpp

int Son::val(){ //... }

3. Final、クラスを継承できないようにクラスを変更するために使用されます。 Ip Man 1、Ip Man 2、Ip Man 3、Ip Man 4に少し似ています。4で終わり、次のものはありません。



class yewen1{} class yewen2:public yewen1{} class yewen3:public yewen2{} class yewen4 final: public yewen3{}

4.メモリリークを防ぐために、基本クラスのデストラクタに仮想を追加して、基本クラスの関数を仮想関数にするのが最善です。目的は、deleteを使用してクラスポインタが解放されたときに動的な破棄を実現することです。

  1. 基本クラスポインタが基本クラスオブジェクトを指している場合は、基本クラスのデストラクタを呼び出します。
  2. 基本クラスのポインタがサブクラスオブジェクトを指している場合は、最初にサブクラスのデストラクタを呼び出し、次に親クラスのデストラクタを呼び出します。

父.h

class Father{ public: virtual ~Father() }

Son.h

class Son:public Father{ public: ~Son() }

5.一部のクラスがオブジェクトを作成する必要がない場合、このクラスで定義された一部のメンバー関数は正式なインターフェイスのみを提供し、サブクラスに具体的な実現を行わせると、純粋仮想関数を使用できます。
使用法:仮想を使用し、= 0

父.h

class Father{ public: virtual int val() = 0//No need to do specific implementation }

Son.h

class Son:public Father{ public: virtual int val() override }

彼らは.cpp

int Son::val(){ //... }