作为抽象类的基类的派生类

时间:2017-02-04 15:39:03

标签: c++ oop inheritance abstract-class virtual-functions

我定义了一个超类element。有一些element的派生类说trianglequadcube。一些element对象是边界元素。如果element是边界元素,那么我必须定义其他数据成员和函数。如果boundary_element类不是基类,我可以轻松派生element类。(我的意思是,如果trianglequadcube是单独的类我可以定义单独的派生类,如boundary_triangleboundary_quadboundary_cube)。

所以我的问题是我必须定义一个子类boundary_element,它必须是用于定义派生类boundary_quadboundary_triangle和{{1}的基类(甚至是抽象)类。 }。

这在C ++中是否可行?谁能建议任何有助于此目的的架构?

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

boundary_cube

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. } 指针被定义为另一个类的成员变量。如何使用继承有效地重构此类。 (即将其用作抽象类,用于派生elementboundary_triangleboundary_quad

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

2 个答案:

答案 0 :(得分:3)

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

这样的事情:

class Element {
};

class Boundary {
};

class Triangle : public Element {
};

class BoundaryTriangle : public Triangle, public Boundary {
};

. . .

答案 1 :(得分:1)

  

这在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   
    };