производный класс базового класса, функционирующий как абстрактный класс

Я определил супер класс 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 учебный класс )

Я не знаю, мой вопрос странный, но, как новичок, я действительно не понимаю, как правильно использовать наследование. Извините, если мой заголовок вводит в заблуждение.

4

Решение

C ++ имеет множественное наследование, поэтому вы можете наследовать от Element а также Boundary в то же время и избежать дублирования кода.

Что-то вроде этого:

class Element {
};

class Boundary {
};

class Triangle : public Element {
};

class BoundaryTriangle : public Triangle, public Boundary {
};

. . .
3

Другие решения

Это как-то возможно в 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
    };
    
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector