対象の仮想関数(多型)(抜粋)を理解するための機構
次のプログラム出力
クラスベース{ パブリック: ベース(INTのJ)、I(J){} 仮想〜ベース(){} ボイド関数func1(){ iは = * 10 。 関数func2(); } int型のgetValue(){ リターン Iと、 } 保護: 仮想 ボイド関数func2(){ iは ++ ; } 保護: int型私は、 }。 クラスの子供:公衆基地{ 公共の: 子(int型J):ベース(J){} ボイド関数func1(){ iは = * 100 。 関数func2(); } 保護: ボイド関数func2(){ I + = 2 ; } }。 INT メイン(){ 基本 *のPB = 新しい子供(1 )。 PB - > 関数func1(); COUT << PB->のgetValue()<< ENDL。削除PBを。}
回答:12
//
(1)、第一のサブクラスのオブジェクトを作成ベース* PB =新しい新しい子は、それが1に初期化するが、PBの基本型である、
関数func1()は仮想関数ではないので、PB->関数func1()基底クラス関数func1により行われます、I = 10、次いで、関数func2()関数を呼び出し、
関数func2仮想関数ここに、派生クラス見下ろすために後に見出され、派生クラスの実行、I = 12この場合、関数func2()を、
そして最後に実行PB->のgetValueを()、結果は12である
---------------------
著者:少し_cipher
源:CSDNの
オリジナル:HTTPS://blog.csdn.net/u012605629/article /詳細/ 43709613