c++サブクラス継承親の上書き問題
4511 ワード
くだらないことは言わないで、まずコードを見てください.
皆さんは出力の結果を知っていますか?結果は4と8(私のマシンのintは4バイトです)!
これは何を説明していますか.説明Bで定義したvalはAのvalを上書きするのではなく、Aのvalを継承し、自分も別のvalを定義している.だからBの大きさは2つのintですね.これはメンバー変数の大きさを測ることができるので、2部だと知っていますが、次は?
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関係に合わない!
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関係に合わない!