为了账号安全,请及时绑定邮箱和手机立即绑定

菱形继承时 若没有使用条件编译及虚继承, 为什么会出现重定义啊!!

菱形继承时 若没有使用条件编译及虚继承, 为什么会出现重定义啊!!

C++
慕粉3379761 2016-07-22 10:44:55
查看完整描述

1 回答

已采纳
?
MadMarical

TA贡献79条经验 获得超122个赞

你好。假设有a类为根类,另有两个类b,c分别继承了a,那么同时b,c也继承了a中的成员以及成员函数。此时通过多重继承的方法让d继承自b,c这就产生了所谓的菱形继承。

假设a中有一公有方法init();

b,c继承自a也都有init方法;

d继承自b,c;

此时假设用d生成对象x,x调用init()。编译器将会产生疑惑,这个init到底是b中的init还是c中的init,因为两者看上去是一样的(都继承自a)。

正是由于这个原因,所以才使用虚继承,保证后面不出现二义性。

查看完整回答
2 反对 回复 2016-07-22
  • 慕粉3379761
    慕粉3379761
    谢了。。其实提问之后就发现了在菱形继承最底端,在加载两个父类的头文件时就会出现重定义
  • 1 回答
  • 0 关注
  • 962 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信