废话少说,先看一段代码!
1 #include2 #include 3 using namespace std;4 5 class A6 {7 public:8 int val;9 };10 class B:public A11 {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 A2 {3 public:4 void fun()5 {6 cout << "A" << endl;7 }8 };9 class B:public A10 {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关系!