微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

上载以与私有继承接口

如何解决上载以与私有继承接口

我有以下情况

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。