エッセイを受けた上でのC ++、仮想関数の役割、

そして、前の例に比べて、単に本実施形態の表示で()関数は、追加する前に宣言されているvirtualキーワードを、仮想関数(仮想関数)のためのメンバ関数の宣言、あなたはポインタpのクラスの先生のメンバ関数を呼び出すことができるように、業績も(Zhaohong嘉が教師となっている、もはやローファーです)この点を証明しました。


仮想関数(メンバ変数とメンバ関数を含む)は、ベースクラスのメンバーの使用に関する基本クラスのポインタと、派生クラス派生オブジェクトの指示体を使用し、基本クラスのオブジェクトを指します。つまり、基底クラスが道によると、基本クラスを操作するポインタであってもよいし、物事を行うには、クラスの方法を導出することができる、それは様々な形態を持っている、またはそれは多くの点で明らかに、我々はこの現象を呼び出す(多型多型)

上記のコードは、また、p->display();異なるオブジェクトにP点は、それが操作を行った場合、このステートメントは、同じではありません。同じ文が異なる操作を行うことができ、多型で、さまざまな症状があるようです。

多型は、C ++仮想関数のみ有用な構成は多型であり、オブジェクト指向プログラミングの主な特徴の一つです。

C ++は、多型オブジェクトを提供する:特定のメンバー関数で、基底クラスによって(派生直接的および間接的誘導体を含む)すべての派生クラスのアクセスメンバ変数とメンバ関数を意味する「完全」であることができます。何の多型が存在しない場合、我々は唯一のメンバ変数にアクセスすることができます。

我々は、この引数は適用されない通常のメンバ関数は、ポインタを介して呼び出すとき呼ばれるクラスのメンバー関数を決定するために(クラスがポインタにより定義される)ポインタの種類に応じて、前に述べたが、このセクションの分析により求めることができます仮想関数に、仮想関数は、クラスと呼ばれるクラスの仮想関数のオブジェクトへのポインタの呼び出しへのポインタです。

しかし、その後、再び、オブジェクトのメモリモデルは、任意のメンバ関数の何の情報は非常にきれいではありません、応じて、どのようなメンバー関数コンパイラはそれを見つけますか?

 

 

 

 

 

 

 

 

 

 

書式#include <iostreamの>
使用して、名前空間STD;
//基底クラスの人々の
階級の人々 {
パブリック:
ピープル(CHAR *名、int型の年齢);
;仮想無効表示()として宣言//仮想関数
の保護:
CHAR * M_NAME;
int型のm_age。
};
人々 ::人々 (のchar *名、int型の年齢):M_NAME(名)、m_age(年齢){}
空の人々 ::(表示を実行します){
coutの<< << M_NAME "今年は" << m_age <<「歳、浮浪者「<<てendl ;.
}
//派生クラスの先生の
クラスの先生:公共の人々 {
パブリック:
教師(CHAR *名、int型年齢、給与のint);
仮想無効ディスプレイ(); //仮想宣言しました
プライベート:
int型のm_salary;
};
教師::教師(CHAR *名、int型の年齢、給与INT):人々 (名前、年齢)、m_salary(給料){}
先生は::ディスプレイのボイドを実行します(){
coutの<< << M_NAME "今年は" << m_age << << m_salary << <<てendl "所得元" "歳は、毎月があり、教師でした"。
}
int型のmain(){
人物人物新しい新しい= P *( "王志剛"、23である);
P - >ディスプレイ();
P =新しい新しい教師( "Zhaohong甲"、45、8200);
P - >ディスプレイ();
戻り0;
}

おすすめ

転載: www.cnblogs.com/qianrushi1/p/11564396.html