【发布时间】:2020-10-28 17:02:04
【问题描述】:
我有以下情况
class Interface {
};
class ComplicatedObject : public Interface {
};
我想给出一个 ComplicatedObject 的简化版本,仍然提供接口。我在想私有继承,比如
class Simplified : private ComplicatedObject {
};
但是,当然,我不能像这样轻易地向上转换到接口
int main() {
Interface* p = new Simplified();
}
组合是唯一的出路吗?还是有一些解决方法?比如隐式转换
【问题讨论】:
-
您希望通过提供简化的界面来实现什么目标?有没有打算解决的问题?
-
如果
Simplified也完全实现Interface它可以继承它,但你需要虚拟继承。 -
它在这里不起作用,因为你有一个拥有的指针,但考虑一个隐式转换运算符将
Interface &转换为Simplified &。 -
你可以使用一个公共静态方法来执行新的然后在返回时向上转换吗?
-
您也许可以交换继承:Complicated 派生自 Simplified,而 Simplified 派生自 Interface。
标签: c++ upcasting private-inheritance