博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++子类继承父类的覆盖问题
阅读量:4948 次
发布时间:2019-06-11

本文共 761 字,大约阅读时间需要 2 分钟。

废话少说,先看一段代码!

1 #include 
2 #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关系!

转载于:https://www.cnblogs.com/zhuwbox/p/3416429.html

你可能感兴趣的文章
SQL中Group By的使用
查看>>
Mybatis映射原理,动态SQL,log4j
查看>>
哪个微信编辑器比较好用?
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
gdb调试中出现No symbol table is loaded. Use the "file" command.问题
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
图像加载
查看>>
关于zxing生成二维码,在微信长按识别不了问题
查看>>
Haskell学习-高阶函数
查看>>
手动通知扫描SD卡主动生成缩略图
查看>>
js中tagName和nodeName
查看>>
PC-XP系统忘记密码怎么办
查看>>
Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
SQL数据库学习系列之一
查看>>
Boosting(提升方法)之AdaBoost
查看>>