基类的派生类,用作抽象类

derived class of a base class functioning as an abstract class

本文关键字:抽象类 派生 基类      更新时间:2023-10-16

我定义了一个超类elementelement有一些派生类,如trianglequadcube。某些element对象是边界元素。如果element是边界元素,那么我必须定义额外的数据成员和函数。如果element类不是基类,我本可以很容易地派生出boundary_element类。(我的意思是,如果trianglequadcube是单独的类,我可以定义单独的派生类,如boundary_triangleboundary_quadboundary_cube)。

所以我的问题是,我必须定义一个子类boundary_element,它必须是定义派生类boundary_quadboundary_triangleboundary_cube的基类(甚至抽象类)。

这在C++中有可能吗?有人能提出任何能达到这个目的的建筑吗?

我可以根据我的逻辑解决问题的另一种方法是,定义一个类,如下所示:

class boundary_element
{    
element* m_boundary_elem;  
//data members needed for quad,triangle and cube
public:
boundary (element*);
//functions for modifying data's of triangle,cube,quad.
}

element指针被定义为另一个类的成员变量。如何使用继承有效地重构这个类。(即将其用作抽象类,用于派生boundary_triangleboundary_quadboundary_cube类)

我不知道我的问题有多奇怪,但作为一个初学者,我真的很困惑如何正确使用继承。对不起,如果我的标题有误导性。

C++具有多重继承,因此可以同时从ElementBoundary派生,避免代码重复。

类似这样的东西:

class Element {
};
class Boundary {
};
class Triangle : public Element {
};
class BoundaryTriangle : public Triangle, public Boundary {
};
. . .

这在C++中可能吗?

当然是。

有人能提出任何符合目的的架构吗?

大致如下:

  • 有一个抽象基类和接口

    class AbstractShape {
    boundary getBoundary() const = 0;
    void draw(OutputScreen& screen) const = 0;
    };
    
  • 实现特定形状,如

    Triangle : public AbstractShape {
    // Implement the triangle specifics   
    };
    Rectangle : public AbstractShape {
    // Implement the rectangle specifics   
    };
    Circle : public AbstractShape {
    // Implement the circle specifics   
    };