2017-02-04 13 views
4

Я определил суперкласс element. Существует некоторый производный класс elementtriangle, 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 указатель определяется как переменную-член другого класса. Как я могу реструктурировать этот класс эффективно с помощью наследования. (Т.е. Function как абстрактный класс, для получения boundary_triangle, boundary_quad и boundary_cube класса)

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

+0

Я думаю, вы просто не должны использовать наследование этой проблемы вообще. –

+0

@ChristianHackl, тогда я должен определить слишком много избыточных типов и функций данных в одном классе.Будет ли это неэффективно, поскольку он потребляет большую память? – hisham

ответ

3

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

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

class Element { 
}; 

class Boundary { 
}; 

class Triangle : public Element { 
}; 

class BoundaryTriangle : public Triangle, public Boundary { 
}; 

. . . 
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 
    }; 
    
+0

Я думаю, вы неправильно поняли мою проблему. Форма может быть в границе. Если это граница, то как мне определить border_triangle, border_rectangle и border_circle, таким образом, она наследует некоторые из общих данных и функций из базового класса border_element? – hisham

+0

@ user7491077 Вероятно, вы ошибаетесь в проблеме, иначе я совершенно неправильно понял, что вы пытаетесь сделать. –