Я определил супер класс 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
а также boundary_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_triangle
, boundary_quad
, а также boundary_cube
учебный класс )
Я не знаю, мой вопрос странный, но, как новичок, я действительно не понимаю, как правильно использовать наследование. Извините, если мой заголовок вводит в заблуждение.
C ++ имеет множественное наследование, поэтому вы можете наследовать от Element
а также Boundary
в то же время и избежать дублирования кода.
Что-то вроде этого:
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
};