C ++仮想関数と純粋仮想関数C ++仮想関数のと純粋仮想関数の使用状況が異なるとの間の使用(RPM)

C ++仮想関数と純粋仮想関数の使用状況が異なる(RPM)

 

1.仮想関数と純粋仮想関数は同じクラス(クラス)で定義することができ、純粋仮想関数を含むクラスは、抽象クラス(抽象クラ​​ス)と呼ばれているが、唯一のクラスの仮想関数(クラス)を含有する抽象呼び出すことができませんクラス(抽象クラ​​ス)。

  

2.仮想関数オーバーロード呼び出し多形後のサブクラス(サブクラス)にも、直接ことができる使用することができ、及び機能(サブクラス)のサブクラスで実装されなければならない純粋仮想関数として純粋仮想のみを使用することができます基底クラス(基底クラス)での機能は、定義されていないと宣言しました。

 

3.純粋仮想関数と仮想関数は、サブクラス(サブクラス)にある多形と呼ばれるようにオーバーロードされています。

 

4.純粋仮想関数と継承サブクラス過負荷オブジェクト間の抽象基底クラス(抽象基底クラス-abc)中に通常存在する仮想関数は、統一されたインタフェースを提供することです。

 

仮想関数は、フォームに定義されている仮想{メソッド本体}

  フォームの純粋仮想関数を定義:} {仮想0 =。

仮想関数と純粋仮想関数の定義で静的な識別子を持つことができない、その理由は、非常に単純である事前バインドを依頼する、コンパイル時に静的関数を変更しますが、仮想関数は、(実行時バインド)動的バインディングであり、2つです修飾された関数のライフサイクル(生活のリサイクル)が同じではありません人。

 

6.仮想関数を実装する必要があります、達成されない場合、コンパイラはエラーを報告します、エラーメッセージは次のとおりです。

エラーLNKは****:未解決の外部シンボル"パブリック:__thiscall仮想空
のClassName :: virtualFunctionName(無効)"

7.仮想関数の場合は、親クラスとサブクラスは、独自のバージョンを持っています。多状態モードによって呼び出されたときに動的結合。

 

純粋仮想関数を実装8サブクラス、プログラミング仮想関数にサブクラスに純粋仮想関数、すなわち、サブクラスのサブクラスは、クラス孫をオーバーライドすることができ

結合多状態モード動的によって呼び出される仮想関数、。

9の多型(多型)を実装するためのC ++仮想関数の機構。核となるアイデアは、基本クラスで定義された派生クラスを訪問することです

機能

10.多型は、同じまたは異なるオブジェクトを参照異なるメッセージは、メッセージを受信した場合と同じ動作を達成するために異なるオブジェクトを有する受信します。C ++は、二つの多型をサポートしています。コンパイル時のポリモーフィズム、実行時ポリモーフィズム。
コンパイル時ポリモーフィズム:関数オーバーロードされた
仮想関数によって実現:多型Bランタイムを。

 

11.クラスは純粋仮想関数が含まれている場合は、抽象基底クラス(ABC)を直接呼び出すことはできませんので、このクラス文をインスタンス化しようとすると、エラーが発生します。それは後に、サブクラスの過負荷、要求に応じて呼び出し、サブクラスのメソッドによって継承されなければなりません。

コードをコピー
書式#include <iostreamの> 
名前空間stdを使用。

クラスVirtualbase 

{ 

パブリック:

    仮想ボイド悪魔()= 0。//プルー仮想関数

    仮想ボイドベース(){COUT <<「これは遠いクラスである」<< ENDL。} 

}。

//サブクラス

クラスSubVirtual:公共Virtualbase 

{ 

パブリック:

    無効悪魔(){ 
        裁判所未満は<< "これはSubVirtualです!" <<てendl; 
    } 

        ボイドベース(){ 
            COUTは<< << ENDL "このサブクラス塩基です"。
        } 

    }。


        ボイドメイン()

        { 

            Virtualbase *の工大=新しいSubVirtual()。


            inst->ベース(); 

            //研=新しいVirtualbase(); 

            // inst->ベース()
            システム( "休止")。

            返します。

        }
コードをコピー

 

1.仮想関数と純粋仮想関数は同じクラス(クラス)で定義することができ、純粋仮想関数を含むクラスは、抽象クラス(抽象クラ​​ス)と呼ばれているが、唯一のクラスの仮想関数(クラス)を含有する抽象呼び出すことができませんクラス(抽象クラ​​ス)。

  

2.仮想関数オーバーロード呼び出し多形後のサブクラス(サブクラス)にも、直接ことができる使用することができ、及び機能(サブクラス)のサブクラスで実装されなければならない純粋仮想関数として純粋仮想のみを使用することができます基底クラス(基底クラス)での機能は、定義されていないと宣言しました。

 

3.純粋仮想関数と仮想関数は、サブクラス(サブクラス)にある多形と呼ばれるようにオーバーロードされています。

 

4.純粋仮想関数と継承サブクラス過負荷オブジェクト間の抽象基底クラス(抽象基底クラス-abc)中に通常存在する仮想関数は、統一されたインタフェースを提供することです。

 

仮想関数は、フォームに定義されている仮想{メソッド本体}

  フォームの純粋仮想関数を定義:} {仮想0 =。

仮想関数と純粋仮想関数の定義で静的な識別子を持つことができない、その理由は、非常に単純である事前バインドを依頼する、コンパイル時に静的関数を変更しますが、仮想関数は、(実行時バインド)動的バインディングであり、2つです修飾された関数のライフサイクル(生活のリサイクル)が同じではありません人。

 

6.仮想関数を実装する必要があります、達成されない場合、コンパイラはエラーを報告します、エラーメッセージは次のとおりです。

エラーLNKは****:未解決の外部シンボル"パブリック:__thiscall仮想空
のClassName :: virtualFunctionName(無効)"

7.仮想関数の場合は、親クラスとサブクラスは、独自のバージョンを持っています。多状態モードによって呼び出されたときに動的結合。

 

純粋仮想関数を実装8サブクラス、プログラミング仮想関数にサブクラスに純粋仮想関数、すなわち、サブクラスのサブクラスは、クラス孫をオーバーライドすることができ

結合多状態モード動的によって呼び出される仮想関数、。

9の多型(多型)を実装するためのC ++仮想関数の機構。核となるアイデアは、基本クラスで定義された派生クラスを訪問することです

機能

10.多型は、同じまたは異なるオブジェクトを参照異なるメッセージは、メッセージを受信した場合と同じ動作を達成するために異なるオブジェクトを有する受信します。C ++は、二つの多型をサポートしています。コンパイル時のポリモーフィズム、実行時ポリモーフィズム。
コンパイル時ポリモーフィズム:関数オーバーロードされた
仮想関数によって実現:多型Bランタイムを。

 

11.クラスは純粋仮想関数が含まれている場合は、抽象基底クラス(ABC)を直接呼び出すことはできませんので、このクラス文をインスタンス化しようとすると、エラーが発生します。それは後に、サブクラスの過負荷、要求に応じて呼び出し、サブクラスのメソッドによって継承されなければなりません。

コードをコピー
書式#include <iostreamの> 
名前空間stdを使用。

クラスVirtualbase 

{ 

パブリック:

    仮想ボイド悪魔()= 0。//プルー仮想関数

    仮想ボイドベース(){COUT <<「これは遠いクラスである」<< ENDL。} 

}。

//サブクラス

クラスSubVirtual:公共Virtualbase 

{ 

パブリック:

    無効悪魔(){ 
        裁判所未満は<< "これはSubVirtualです!" <<てendl; 
    } 

        ボイドベース(){ 
            COUTは<< << ENDL "このサブクラス塩基です"。
        } 

    }。


        ボイドメイン()

        { 

            Virtualbase *の工大=新しいSubVirtual()。


            inst->ベース(); 

            //研=新しいVirtualbase(); 

            // inst->ベース()
            システム( "休止")。

            返します。

        }
コードをコピー

 

おすすめ

転載: www.cnblogs.com/tsh292278/p/10931493.html