если мы вызываем Child(int), то в случае наличия Parent(int) вызывается именно он, в противном Parent()?
в с++ нет
все зависит от того, как определен Child(...)
Нет, это не так. Всегда вызывается конструктор предка по умолчанию.
Подзабыл кое-один момент. К примеру, имеется абстрактный интерфейс без конструктора с аргументом string. В наследованном от него класса есть поле string и конструктор с аргументом string. Это должно работать?
Шли код... Я лично так не понимаю
struct A { virtual ~A(){} virtual foo()=0; }; struct B : A { foo override(){} explicit B(std::string name) :name_(name){} std::string name_; };
А вопрос-то в чем?
Запутался с утра. Я почему-то думал, что родительский класс должен тоже иметь такой же конструктор :D. Получается, для такого куска кода: A* tmp = new B ("temp"); Сперва для родительского класса вызывается конструктор по умолчанию,а далее для наследника тот, что имеем, то бишь аргументом?
Должен. Но звать ТЫ его должен руками.
Вроде того, конструктор наследника обязан первым делом позвать какой-нибудь конструктор базового класса. Если явного вызова нет, то зовётся конструктор по умолчанию
И этот конструктор - дефолтный
Точно! В наследнике сейчас так: explicit B(..) : A(), name_(name) {} Спасибо!
Вот A() можно не вызывать явно. А другие конструкторы нужно
Обсуждают сегодня