当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《寻找比C++中的虚拟继承更好的方法》经验,为你挑选了1个好方法。

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

我正在使用一个提供标准Shape接口的库,以及一些常见的形状.

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.好吧,正如你所看到的,我现在已经创建了可怕的钻石继承问题.如果第三方库为其Square,Circle等使用虚拟继承,则可以很容易地解决这个问题.但是,让他们这样做并不是一个合理的选择.

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

谢谢!



1> Dave Hillier..:

为什么这个类需要从形状派生出来?

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

为什么不呢

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

ImprovedSquare是一个Shape,是一个ThingWithArea

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有