gpt4 book ai didi

c++ - 在 C++ 中寻找比虚拟继承更好的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:27 24 4
gpt4 key购买 nike

好的,我有一个有点复杂的 C++ 系统。简而言之,我需要向第三方抽象基类添加一个方法。第三方还提供了大量也需要新功能的派生类。

我正在使用一个提供标准 Shape 接口(interface)以及一些常见形状的库。

class Shape
{
public:
Shape(position);
virtual ~Shape();

virtual position GetPosition() const;
virtual void SetPosition(position);

virtual double GetPerimeter() const = 0;

private: ...
};

class Square : public Shape
{
public:
Square(position, side_length);
...
};

class Circle, Rectangle, Hexagon, etc

现在,这是我的问题。我希望 Shape 类也包含一个 GetArea() 函数。所以看来我应该做一个:

class ImprovedShape : public virtual Shape
{
virtual double GetArea() const = 0;
};

class ImprovedSquare : public Square, public ImprovedShape
{
...
}

然后我开始制作一个继承自 ImprovedShape 和 Square 的 ImprovedSquare。好吧,如你所见,我现在已经创建了可怕的 diamond inheritance problem。 .如果第三方库使用 virtual inheritance,这很容易解决。对于他们的 Square、Circle 等。但是,让他们这样做并不是一个合理的选择。

那么,当您需要向库中定义的接口(interface)添加一些功能时,您会怎么做?有好的答案吗?

谢谢!

最佳答案

为什么这个类需要派生自shape?

class ImprovedShape : public virtual Shape
{
virtual double GetArea() const = 0;
};

为什么不拥有

class ThingWithArea 
{
virtual double GetArea() const = 0;
};

ImprovedSquare 是一个 Shape 并且是一个 ThingWithArea

关于c++ - 在 C++ 中寻找比虚拟继承更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/249500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com