我定义了一个超类element
。有一些element
的派生类说triangle
,quad
和cube
。一些element
对象是边界元素。如果element
是边界元素,那么我必须定义其他数据成员和函数。如果boundary_element
类不是基类,我可以轻松派生element
类。(我的意思是,如果triangle
,quad
和cube
是单独的类我可以定义单独的派生类,如boundary_triangle
,boundary_quad
和boundary_cube
)。
所以我的问题是我必须定义一个子类boundary_element
,它必须是用于定义派生类boundary_quad
,boundary_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.
}
指针被定义为另一个类的成员变量。如何使用继承有效地重构此类。 (即将其用作抽象类,用于派生element
,boundary_triangle
和boundary_quad
类
我不知道我的问题很奇怪,但作为初学者,我真的很困惑如何正确使用继承。对不起,如果我的标题有误导性。
答案 0 :(得分:3)
C ++具有多重继承,因此您可以同时从Element
和Boundary
派生,避免代码重复。
这样的事情:
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
};