0

我有以下情况

class Interface {
};

class ComplicatedObject : public Interface {
};

我想给出一个 ComplicatedObject 的简化版本,仍然提供接口。我在考虑私有继承,例如

class Simplified : private ComplicatedObject {
};

但是,当然,我不能像

int main() {
  Interface* p = new Simplified();
}

组合是唯一的出路吗?还是有一些解决方法?像隐式转换

4

1 回答 1

1

组合是唯一的出路吗?

向上转换也不适用于合成。从类外的角度来看,私有继承是有效的组合。

还是有一些解决方法?

不是隐含的,但您可以提供一组返回对基的引用的成员函数。


一个更彻底的改变——但更明智——是改变前提并使用虚拟继承:

class Interface {};

class ComplicatedObject : public virtual Interface {};

class Simplified : private ComplicatedObject, public virtual Interface {};

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

于 2020-10-28T17:23:04.553 回答