上载以与私有继承接口

问题描述

我有以下情况

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 {};

这也可以在没有虚拟继承的情况下完成,但是在那种情况下,您将需要重新实现所有虚拟函数并明确地委派给私有库。