有个C++虚继承的问题
来源:互联网 发布:用java打印乘法表 编辑:程序博客网 时间:2024/05/01 16:08
问题:
C++中虚继承,Grandma <- Father <- Son, Father 虚继承自Grandma,但是构造Son对象的时候为什么只能掉到Grandma的默认构造函数,真是费解,虚继承主要是用于解决多重继承产生ambigrous问题,这个问题由虚继承引起,不涉及多重继承的层面问题......
[已经解决]
原因:在C++编译器中建立对象时,如果这个对象中包含从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的,而且只有最远派生类的构造函数会调用虚基类的构造函数,该派生类的其他基类对虚基类构造函数的调用都自动被忽略。
<<C++ Primer>> 第四版 第626页也有相应的描述需要显示初始化基类。看过的,很长时间了,没想起来。
回头想想,这么做的目的也是为了避免多继承时候,
如:
Grandma <-(virtual) Father <- Son
<-(virtual) Uncle <-
Father和Uncle均对Grandma有不同的默认值的设置的话,创建Son对象的话,会对Grandma的成员变量的赋值残生二义性。所以为了避免这种情况的发生,就直接在Son对象中进行Grandma成员变量的初始化工作。
示例程序:
输出:输出为0,证明调用的Grandma的默认构造函数。Why只能掉到默认的?
Grandma Called!
0
0
Father Called!
Son Called!
0
0
以下按照3楼意见更行的代码,可以看出端详
输出:
Grandma Called!
1
2
Father Called!
1
2
3
Son Called!
1
2
3
Grandma Called!
1
2
Father Called!
1
2
3
- 有个C++虚继承的问题
- c++-关于菱形继承&虚继承的问题总结
- 有虚函数或虚继承关系的sizeof问题
- 1.13---继承的3个问题
- 我有个问题想请高手解答一下!是C语言的!谢谢了!我有急用
- 接口继承的声明问题 [C#, BCL]
- 有个小小的用户问题
- (C++)继承、菱形继承和虚继承的那些事儿
- 我有个问题
- 我有个问题
- 初来乍到,有个问题
- 我有个问题
- 面试中c++中单继承关于虚函数常遇到的4个问题
- 有问题的C语言代码
- 我的第一个有颜色的控制台C程序
- 有虚继承的类其有几个虚继承的基类则该类就有几个虚表
- C/C++_log2000_对继承学习有帮助的资料积累
- C程序:n!的末尾有多少个0
- 手机开发平台指南、教程和资料介绍
- COM高手总结的八个经验和教训
- PyQt(2) 对话框
- 详谈调用winpcap驱动写arp多功能工具
- ANDROID SDK 1.5 - 包装索引
- 有个C++虚继承的问题
- C#控制台 学生学籍管理系统
- Builder Pattern
- Windows下DNS ID欺骗的原理与实现
- Creating a Shape from a Stroked Shape
- BSD net源码分析(3)──SLIP接口
- BSD net源码分析(4)──环回接口
- BSD net源码分析(2-3)
- BSD net源码分析(2-4)