以下のコードではまず見て、親クラスを作成し、その後、サブクラス1にして親クラスを継承し、2クラスは、親ポインタを作成するためのコードの最初の35〜37行で、独自のplay()メソッドを、持っていますその後、親クラスを参照することにより、サブクラスアドレスの割り当ては、その後、ポインタPプレイを呼び出す()メソッドは、どのようなまだプリントアウトします。私はライン36を引用するので、それは、play()メソッドを呼び出すのサブクラスであるだろうと思ったが、印刷結果は次のとおりです。
この遊びは、親クラスであります
1つの#include <iostreamの> 2 3。 クラス父 4。 { 5。 公共: 6。 ボイドプレイ() 7。 { 8。 STD :: COUTが<< " これは、親クラスの遊びである" << STD :: ENDL; 9。 } 10 ;} 11。 図12は、ある クラスの息子:公共父 13は { 14 公共: 15 ボイドプレイ() 16 { 17。 STD :: COUT << " このサブクラスプレイであります「 << はstd :: ENDL; 18 } 19 }; 20 21 22 空隙パーティ(父**男性、int型NUM) 23 { 24 のために(INTは iは= 0 ; I <NUM; I ++ ) 25 { 26 人の男性[I] - > 再生(); 27 } 28 } 29 30 のint main()の 31 { 32 父の父、 33 息子息子; 34 35 父* P; //ポインタPが親クラスに定義された 36 P =&息子; // ポインタ参照サブクラスアドレス 37 [ P->プレイ(); // ポインタにアクセスplay()メソッド、アクセスが遊びサブクラス()それでしょうか? 38であり、 39 }
ポインタを介して親クラスのサブクラスのアクセス方法は、このような状況は、多くの場合、プロジェクトに遭遇します。あなたが親クラスによってサブクラスのメソッドポインタにアクセスしたい場合はどのようにそれを行うには?ただ、関連する親クラスのメソッドの前にキーワードを追加します。仮想
次のコード:
1つの#include <iostreamの> 2 3。 クラス父 4。 { 5。 公共: 6 仮想 ボイドプレイ() // 前に仮想キーワードを増加させるの親クラスプレイ()メソッド 。7 { 8。 STD :: COUT << " これは、親クラスでありますプレイ" << STD :: ENDL; 9。 } 10 }; 11。 12がある クラスソン:公共父 13は { 14 公共: 15 ボイド再生() 16 { 17 のstd :: COUT << " 这是个子类的再生" << はstd :: ENDL。 18 } 19 }。 20 21 22 空隙パーティ(父**男性、INT NUM) 23 { 24 のために(INT iが= 0 ; I <NUM; I ++ ) 25 { 26 人の男性[I] - > 再生(); 27 } 28 } 29 30 のint main()の 31 { 32 父の父。 図33は、ある 子息子; 34である 35 父* P; // 親クラス定義Pにポインタ 36 P =&息子; // ポインタ参照サブクラスアドレス 37 P->プレイ(); // アクセスポインタを再生()メソッド訪問は、プレイサブクラス()はなぜでしょうか? 38であり、 39 }
次のような結果を操作します:
これは、プレイのサブクラスであります
================================================== ================================================== ======================