问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个关于C++多继承的问题

发布网友 发布时间:2022-06-20 20:43

我来回答

3个回答

热心网友 时间:2024-11-17 09:59

楼主理解的概念有问题,虚继承的作用并不是为了区分不同父类之间的重名函数,
而是为了解决多重继承中菱形继承的二义性问题。

而按照楼主的意思,不同父类里的同名函数的继承,
不管是不是虚继承都会产生二义性,编译器会提示访问不明确。

class A
{
public:
int data;
void test()
{
printf("TEST A\n");
}
};
class B
{
public:
int data;
void test()

{
printf("TEST B\n");
}
};

class C :public A,public B
{
};

C theC;
theC.test();//存在二义性
A* p = new C;
p->test();//这样的情况p是A类指针,所以可以调用到A中的test.

正确的做法应该是在调用的时候指明被调用的函数的作用域,是属于类A还是类B。
或者是在子类中再次定义一个该名称的函数,对父类的函数构成隐藏或者覆盖。
楼主可以参考下C++中 重载覆盖和隐藏 规则。

数据的处理同样是这样。
不论名称是否相同,数据是实际存在于内存中的,只是访问的方式不能被编译器识别,所以不能正常访问到。

热心网友 时间:2024-11-17 09:59

如果不显示指定,会存在词法二义性。编译报错。

热心网友 时间:2024-11-17 09:59

是否是virtual继承都没关系,像你这样多个父类具有同名函数或成员时,子类在调用时必须指明函数来自于哪个类,否则翻译器将报错的,告诉你含糊不清的函数调用或成员访问,不信你可以试一试。

比如 A 和 B都有函数 fun,那么在类C定义里调用的时候得这么写

A::fun();
或 B::fun();

直接写fun() 将引发编译错误
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 C# 中的方法怎样能实现多继承 在Objective-C中如何实现多继承呢? 在C语言中是如何继承的?C#支持多继承吗?? 油麦菜和生菜是同一种蔬菜吗 今天体检,昨天只睡了四个小时,但不累,转氨酶会偏高吗 五小时睡眠够不够 一天只睡五个小时,会出问题吗? 晚上就睡了四个小时,会影响公务员体检吗 高考体检前天晚上只睡5小时有影响吗? 每天睡5个小时会影响高3体检结果吗 每天睡5个小时对身体有影响吗 只睡了5个小时能去做公务员标准的入职体检吗? 长安迷你奔奔偶尔刹车失灵 宋元丰戊午年是正月十五是哪一个? 10000000米等于多少千米 声音在空气中每秒传播330米,每分钟传播多少米?5分钟传播多少千米? 高铁的速度大约是55米/秒,半小时行驶多少千米? 99000m等于多少千米? 民国戊午是哪一年 民国戊午年农历三月十二日是公历哪一年哪月哪日? C++多继承时,多个基类函数有相同名称的变量,怎么解决? 勋章上面的彩带是不是能展开挂在脖子上? 联排勋章是怎么挂上去的? 勋章挂军装左边还是右边? 论坛勋章里的勋章怎么挂上 潮汕的咸茶怎么做? 带有茶字的女生笔名 车窗玻璃升降时噪音比较大怎么解决 iphone突然开不了机 巳蛇年是哪一年 明朝嘉定己巳年是哪一年 己巳年玖月念八是公历哪年哪月哪日 日系轩逸车电瓶没电之后再允电车怎么不能启动? 井里没水了,什么时候会刷新 水井水源经常没水,水泵又经常烧坏怎么办 同治已巳是哪一年?发生什么大事 当代女生的五大快乐源泉分别是哪些? 女生说你是在我苦咖啡里,给我放糖的那一个人是什么意思 为什么女生的快乐那么简单?只要钱就可以了 这也太容易了 逆行扣几分罚多少钱2020年