废话少说,先看一段代码!
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的大小是两个int哈。这个可以测出成员变量的大小,所以知道是两份,那么下面呢?
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函数,这也就解释了B b;A a = b;a.fun()为什么输出"A"了,因为B有两份fun嘛,在执行 a = b的时候只是把B继承A的那份fun复制给了a,所以调用的时候是调用A的fun,输出"A"!
不过,最好不要像上面那样写A类和B类了。这样不符合public继承的is-a关系!