问题描述
我有以下情况
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 {};
这也可以在没有虚拟继承的情况下完成,但是在那种情况下,您将需要重新实现所有虚拟函数并明确地委派给私有库。