您的位置:首页 > 编程语言 > C语言/C++

c++子类继承父类的覆盖问题

2014-04-08 13:22 417 查看
废话少说,先看一段代码!

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关系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: