派生クラス・オブジェクト・アドレス に割り当てられた基本クラスのポインタと派生クラスのポインタ、同じ名前の関数が発生することがオーバーライド及び非表示状況。
上書き: 同じ名前、同じパラメータ、および基底クラスの関数の派生クラスの関数関数の基本クラスが備える仮想キーを
非表示:以下のように両生類割り当てられている機能は、同じ名前の規則の基底クラスの機能を遮蔽します。
- 同じ名前の派生クラスの基底クラスの関数や機能、異なるパラメータに関係なく、仮想キーワードがあるかどうかの、基底クラスの関数が非表示になります。
- 派生クラスの基底クラスの関数と同じ名前の関数は、同じパラメータは、何の仮想キーワードが存在しない、基本クラスの機能が非表示になります。
インタビュープログラマ帳から上記の抜粋<< >>
隠すかああのための派生クラスのポインタに感じる、派生クラスのオブジェクトのアドレスは、基本クラスのポインタに割り当てられ、まだ基底クラスの関数を呼び出しますポインターは、ベース部、派生クラスのオブジェクトを指す。オーバーライドではないでしょうか?
書式#include <iostreamの> 使用して 名前空間はstdを、 クラス ベース{ パブリック: 仮想 ボイド F(フロート X){COUT << " ベース:: F(フロート)" << X << ENDL。} 空隙 G(フロート X){COUT << " ベース:: G(フロート)" << X << ENDL。} ボイド時間(フロート X){COUT << " ベース:: H(フロート)" << X << ENDL。} }。 クラスは派生します: 公共: 仮想 ボイド F(フロート X){COUT << " 派生:: F(フロート)" << X << ENDL。} 空隙 G(INT X){COUT << " 派生:: G(INT)" << X << ENDL。} ボイド時間(フロート X){COUT << " 派生:: H(フロート)" << X << ENDL。} }。 INT メイン() { 由来DD。 ベース * PB =&DD; 派生 * PD =&DD;
3.14f ); PD - > F(3.14f )。 PB - > G(2.22f )。 PD - > G(2.22f )。 PB - > G(2 )。 PD - > G(2 )。 PB - > H(1.21f )。 PD - > H(1.21f )。 }
結果: (書面で、このページを実行) //自分のスペースを追加し、よく見るために、
派生:: F(フロート)3.14 由来:: F(フロート)3.14
ベース:: G(フロート)2.22 由来:: G(INT)2
ベース:: G(フロート)2 由来:: G(INT)2
ベース: :H(フロート)1.21 派生:: H(フロート)1.21