使用多重继承是一个好的概念,还是我可以做其他事情呢?
发布于 2009-01-02 20:05:37
从interview with Bjarne Stroustrup
的人说得很对,你不需要多继承,因为你可以用多继承做的任何事情,你也可以用单继承做。您只需使用我提到的委派技巧即可。此外,您根本不需要任何继承,因为您使用单个继承所做的任何事情都可以通过类转发,而无需继承。实际上,您也不需要任何类,因为您可以使用指针和数据结构来完成所有这些工作。但是你为什么要这么做呢?什么时候可以方便地使用语言工具?您希望在什么情况下采取变通方法?我见过多重继承有用的案例,甚至还见过相当复杂的多重继承有用的案例。通常,我更喜欢使用该语言提供的工具来解决
问题
发布于 2009-01-02 05:18:41
没有理由避免它,而且它在某些情况下非常有用。不过,您需要意识到潜在的问题。
最大的一个是死亡之钻:
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;始终检查您的设计,确保您没有使用继承来节省数据重用。如果你可以用组合来表示同样的事情(通常你可以),这是一种更好的方法。
发布于 2009-01-02 05:18:40
参见w:Multiple Inheritance。
多重继承受到了批评,因此在许多语言中都没有实现。批评包括:
具有C++/Java风格构造函数的语言中的多重继承加剧了构造函数和构造函数链的继承问题,从而在这些语言中产生了维护和可扩展性问题。继承关系中的对象在构造方法变化很大的情况下很难在构造函数链范例下实现。
解决这个问题的现代方法是使用接口(纯抽象类),如COM和Java接口。
我可以做其他的事情来代替这个吗?
?
可以,停那儿吧。我要去偷GoF的东西。
接口的Implementation
上的继承组合
https://stackoverflow.com/questions/406081
复制相似问题