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

为什么我应该避免C ++中的多重继承?

为什么我应该避免C ++中的多重继承?

C++
LEATH 2019-08-29 16:55:29
为什么我应该避免C ++中的多重继承?使用多重继承是一个好主意还是我可以做其他事情?
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

从对Bjarne Stroustrup采访中

人们非常正确地说你不需要多重继承,因为你可以用多重继承做任何事情,你也可以用单继承做。你只需使用我提到的委托技巧。此外,您根本不需要任何继承,因为您使用单继承执行的任何操作,您也可以通过转发类来继承。实际上,您也不需要任何类,因为您可以使用指针和数据结构来完成所有操作。但是你为什么要那样做呢?什么时候使用语言设施方便?你什么时候想要一个解决方法?我已经看到了多继承很有用的情况,我甚至看到过很复杂的多继承很有用的情况。通常,我更喜欢使用该语言提供的功能来进行变通


查看完整回答
反对 回复 2019-08-29
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

没有理由避免它,它在情况下非常有用。但您需要了解潜在的问题。


最大的一个是死亡钻石:


class GrandParent;

class Parent1 : public GrandParent;

class Parent2 : public GrandParent;

class Child : public Parent1, public Parent2;

您现在在Child中有两个GrandParent“副本”。


C ++已经想到了这一点,并允许你做虚拟继承来解决问题。


class GrandParent;

class Parent1 : public virtual GrandParent;

class Parent2 : public virtual GrandParent;

class Child : public Parent1, public Parent2;

始终检查您的设计,确保您没有使用继承来节省数据重用。如果你可以用组合表示相同的东西(通常你可以),这是一个更好的方法。


查看完整回答
反对 回复 2019-08-29
  • 3 回答
  • 0 关注
  • 593 浏览

添加回答

举报

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