c++サブクラス継承親の上書き問題

4511 ワード

くだらないことは言わないで、まずコードを見てください.
1 #include <iostream>

2 #include <string>

3 using namespace std;

4 

5 class A

6 {

7 public:

8 int val;

9 };

10 class B:public A

11 {

12 public:

13 int val;

14 };

15 int main()

16 {

17 cout << sizeof(A) << endl;

18 cout << sizeof(B) << endl;

19 return 0;

20 }

 
皆さんは出力の結果を知っていますか?結果は4と8(私のマシンのintは4バイトです)!
これは何を説明していますか.説明Bで定義したvalはAのvalを上書きするのではなく、Aのvalを継承し、自分も別のvalを定義している.だからBの大きさは2つのintですね.これはメンバー変数の大きさを測ることができるので、2部だと知っていますが、次は?
1 class A

2 {

3 public:

4 void fun()

5 {

6 cout << "A" << endl;

7 }

8 };

9 class B:public A

10 {

11 public:

12 void fun()

13 {

14 cout << "B" << endl;

15 }

16 };

Bにもfun関数が2つあると判断でき、これはB bを説明した.A a = b;a.fun()はなぜ「A」を出力したのか、Bには2つのfunがあるからか、a=bを実行するときはBがAを継承したfunをaにコピーしただけなので、呼び出すときはAを呼び出すfunで、「A」を出力!
でも、A類とB類は上記のように書かないほうがいいです.これはpublicが継承したis-a関係に合わない!