小编Soa*_*res的帖子

C++中接口类和实现类之间的并行继承

我试图以类似于Java接口的方式使用C++抽象基类.假设我们有以下只有纯虚函数的接口类:

class Shape { virtual double area()=0; };
class Square : public Shape { virtual void setLength(double length)=0; };
class Rectangle : public Square { virtual void setWidth(double width)=0; };
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下方式实现Square和Rectangle:

class SquareImpl : public Square { /*implementation*/ };
class RectangleImpl : public SquareImpl, Rectangle { /*implementation*/ };
Run Code Online (Sandbox Code Playgroud)

RectangleImpl同时继承了SquareImplRectangle重用,说,SquareImpl::area().但是当我尝试编译时,出现了两个问题:首先,所有方法SquareImpl都没有得到正确的继承,我必须手动重新实现RectangleImpl::area()RectangleImpl::setLength().其次,这仍然引入了Shape模糊基础的钻石问题RectangleImpl.

如果我真的继承SquareShape,我可以编译代码,但我不认为性能会随着添加的更多派生接口而扩展.同样奇怪的是,虽然继承得很好,RectangleImpl但仍然没有继承.(忽略这里的实用性)SquareImpl::setLength()SquareImpl::area()

另一种解决方案可能是使接口彼此独立,即不使其Square继承Shape …

c++ design-patterns interface multiple-inheritance

6
推荐指数
1
解决办法
2158
查看次数