《Effective C++》条款40
2023-12-20 16:03:01
明智而审慎地使用多重继承
如何看待多重继承?
class A { public: void test(); }; class B { public: int test(); }; class C :public A, public B {}; int main() { C c; c.test(); // 不明确 }
可能会产生歧义,调用不明确。
为了解决,你可以这样:
c.A::test();
菱形继承的问题如何解决??
利用虚继承即可:
class A {}; class B:virtual public A {}; class C :virtual public A {}; class D :public B, public C {};
virtual继承的缺点:
使用virtual继承的那些classes所产生的对象往往比使用non-virtual继承的兄弟们体积大,访问virtual base classes的成员变量时,也比访问non-virtual base classes的成员变量速度慢。
所以,尽量别使用virtual继承,或者不要在virtual base classes中放数据,这样就不用担心这些classes身上的初始化和赋值所带来的诡异事情了。因为当一个新的derived class加入继承体系中,他必须承担其virtual bases的初始化责任。
多继承的用途:
当出现将“public继承自某接口”和“将private继承自某实现”结合在一起时。
总结:
1.多重继承比单一继承复杂。可能导致二义性,以及对virtual继承的需要。
2.virtual继承会增加大小、速度、初始化和赋值复杂度等等成本。如果virtual base classes不带任何数据,是个不错的情况。
3.多重继承的确有正当用途。?
文章来源:https://blog.csdn.net/qq_64863535/article/details/135106515
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!