美文网首页
Effective c++学习笔记(item40)

Effective c++学习笔记(item40)

作者: 懒生活 | 来源:发表于2022-10-18 17:18 被阅读0次

# 谨慎的使用多重继承

首先c++是支持多重继承的。如下面的代码`class student:public persion, private studentInfo{}`.

## 多重继承的问题

+问题一:多重继承发生后,增加了重名函数冲突的风险。如果基类1中有函数name(), 基类2中也有相同的函数name(). 继承类中就会有两个符号为name()的函数。在继承类的类实现体里面如果直接调用name() 是会编译器报错的。

+ 问题二,多重继承会导致数据空间的多重备份。比如D继承与B,C。 B继承于A, C也继承于A。 A里面有个int id。 这时候D里面就会有两份id。 分别是D.B::id 和D.C::id. 但是从实际意义上和需要上,可能你只希望D有一份id。

问题2的解决办法是使用virtual 继承。如果B,C分别是virtual继承于A, 那么在构造D的时候,编译器会识别到,并只构造一份id,也就是D.B::id 和 D.C::id会放在一起。省空间的代价就是后面加了很多辅助信息和判断策略。

# 尽量不要使用多重继承

能想到的使用多重继承合理的场景是,继承类C,需要public继承A的接口+实现(public 继承), 同时需要借助B的实现(private继承)

相关文章

网友评论

      本文标题:Effective c++学习笔记(item40)

      本文链接:https://www.haomeiwen.com/subject/bkaqzrtx.html