У меня есть два (не связанных) класса. Первый «Точка»:Является ли этот пример множественного наследования приемлемым в C++?
typedef std::complex<double> complex_number;
class Point
{
public:
Point(const complex_number &affix);
const complex_number & get_affix() const;
void set_affix(const complex_number & new_affix);
// etc
private:
complex_number affix_;
};
(Кстати, извините за вопрос этот несвязанный вопрос, но где это правильное место, чтобы положить мои определения типа здесь, верхняя часть моего файла point.hpp, ? «хорошая практика»)
Второй является «Abstract_Vertex» (это значит быть частью абстрактного графа позже):
typedef int vertex_label;
class Abstract_Vertex
{
public:
Abstract_Vertex(const vertex_label &label);
const vertex_label & get_label() const;
const vertex_label & get_neighbor_label(const int &index) const;
void set_label(const vertex_label &new_label);
bool is_neighbor_label(const vertex_label &label) const;
// etc
protected:
vertex_label label_;
std::vector<vertex_label> neighbor_labels_;
};
Теперь я хочу, чтобы создать третий класс, «Plane_Vertex» (вершина, расположенная где-то в плоскости). Я размышлял два способа сделать это:
Множественное наследование: класс Plane_Vertex наследует от точечных и Vertex, и не имеет каких-либо членов
класс Plane_Vertex наследует только от Vertex и имеет частный
Point point_
участник.
Конечно, я мог бы легко избежать множественного наследования и просто пойти на вариант 2., но я хороший маленький добросовестный C++ обучаемый, и я хочу знать, что «хорошая практика» была бы в моей ситуации.
Благодарим вас за понимание!
Имеет ли смысл иметь смысл рассматривать «Plane_Vertex» как «точку»? Если это так, то множественное наследование. – jxh
Возможный дубликат [Предпочитаете состав над наследованием?] (Http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance) –
Проверьте дублированный вопрос, с которым я связан; у которого есть действительно хорошие ответы на композицию против наследования, которая по сути вас интересует. –