Как работает родительский конструктор c++ в дочернем классе? У меня есть некий класс Figure, в котором есть композиция объектов Point. От Figure наследуется Hline и Vline. Предполагается, что оба используют композицию Point, но отрисовывают по разному. Решил перенести создание композиции в конструктор, но не знаю как родительский отработает в дочернем. В общем: как родительский конструктор будет работать в дочернем классе? Нужно ли будет его вызывать вручную и если да то как?
В C++ конструкторы дочерних классов автоматически вызывают конструкторы родительских классов. То есть, когда вы создаете объект дочернего класса, сначала вызывается конструктор родительского класса, а затем конструктор самого дочернего класса.
Для вашего случая, если вы хотите создать композицию объектов Point в конструкторе дочернего класса, вам не нужно вызывать конструктор родительского класса вручную. Просто инициализируйте композицию в конструкторе дочернего класса, как показано ниже:
class Figure { public: Point p1; Point p2; Figure() : p1(Point(0,0)), p2(Point(0,0)) {} }; class Hline : public Figure { public: Hline() { p1 = Point(0,0); // инициализация композиции в дочернем классе p2 = Point(10,0); } }; class Vline : public Figure { public: Vline() { p1 = Point(0,0); // инициализация композиции в дочернем классе p2 = Point(0,10); } }; int main() { Hline hline; Vline vline; return 0; }
В приведенном коде, конструкторы дочерних классов Hline и Vline вызовут конструктор родительского класса Figure, который инициализирует композицию объектов Point. Вам необходимо только инициализировать композицию объектов Point в конструкторах дочерних классов, как показано.
В C++ конструкторы дочерних классов автоматически вызывают конструкторы родительских классов. То есть, когда вы создаете объект дочернего класса, сначала вызывается конструктор родительского класса, а затем конструктор самого дочернего класса.
Для вашего случая, если вы хотите создать композицию объектов Point в конструкторе дочернего класса, вам не нужно вызывать конструктор родительского класса вручную. Просто инициализируйте композицию в конструкторе дочернего класса, как показано ниже:
class Figure {public:
Point p1;
Point p2;
Figure() : p1(Point(0,0)), p2(Point(0,0)) {}
};
class Hline : public Figure {
public:
Hline() {
p1 = Point(0,0); // инициализация композиции в дочернем классе
p2 = Point(10,0);
}
};
class Vline : public Figure {
public:
Vline() {
p1 = Point(0,0); // инициализация композиции в дочернем классе
p2 = Point(0,10);
}
};
int main() {
Hline hline;
Vline vline;
return 0;
}
В приведенном коде, конструкторы дочерних классов Hline и Vline вызовут конструктор родительского класса Figure, который инициализирует композицию объектов Point. Вам необходимо только инициализировать композицию объектов Point в конструкторах дочерних классов, как показано.