c++ - 向上转换为与私有继承的接口
问题描述
我有以下情况
class Interface {
};
class ComplicatedObject : public Interface {
};
我想给出一个 ComplicatedObject 的简化版本,仍然提供接口。我在考虑私有继承,例如
class Simplified : private ComplicatedObject {
};
但是,当然,我不能像
int main() {
Interface* p = new Simplified();
}
组合是唯一的出路吗?还是有一些解决方法?像隐式转换
解决方案
组合是唯一的出路吗?
向上转换也不适用于合成。从类外的角度来看,私有继承是有效的组合。
还是有一些解决方法?
不是隐含的,但您可以提供一组返回对基的引用的成员函数。
一个更彻底的改变——但更明智——是改变前提并使用虚拟继承:
class Interface {};
class ComplicatedObject : public virtual Interface {};
class Simplified : private ComplicatedObject, public virtual Interface {};
这也可以在没有虚拟继承的情况下完成,但在这种情况下,您需要重新实现所有虚拟函数并明确委托给私有基。
推荐阅读
- qt - 用 VS2019 构建 QT4.8.6 会报错
- c++ - 索引的指针泛化
- visual-studio-code - 如何在 VSCode 中使所有制表符长度相同?
- mysql - MySQL-Simple Query 需要 11 秒才能返回结果
- android - 为什么android房间抛出CursorWindowAllocationException?
- vue.js - 基于 webpack 应用的动态 vue-router
- php - PHP检查数组是否包含多个值
- python - ConnectionResetError: [WinError 10054] 连接被远程主机中止
- kubernetes - Kubernetes 部署消除了持久卷
- c++ - 不断降低内存分配效率。代码示例