我试图以类似于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同时继承了SquareImpl与Rectangle重用,说,SquareImpl::area().但是当我尝试编译时,出现了两个问题:首先,所有方法SquareImpl都没有得到正确的继承,我必须手动重新实现RectangleImpl::area()和RectangleImpl::setLength().其次,这仍然引入了Shape模糊基础的钻石问题RectangleImpl.
如果我真的继承Square了Shape,我可以编译代码,但我不认为性能会随着添加的更多派生接口而扩展.同样奇怪的是,虽然继承得很好,RectangleImpl但仍然没有继承.(忽略这里的实用性)SquareImpl::setLength()SquareImpl::area()
另一种解决方案可能是使接口彼此独立,即不使其Square继承Shape …