Сценарий 1: Нет проблем компиляции. Когда базовый класс инициализируется в производном классе с использованием списка инициализации
class Base
{
public:
int x;
};
class D:public Base
{
public:
int y;
D(int y1):Base{y1+1},y{y1}{}
};
int main()
{
D d(5);
return 0;
}
Сценарий 2: Не компилируется и не запрашивается параметризованный конструктор.Обратите внимание на виртуальный деструктор в базовом классе $ g ++ -o main * .cpp main.cpp: в конструкторе 'D :: D (int)': main.cpp: 16: 34: ошибка: нет соответствующей функции для вызова 'Base ::Base () 'D (int y1): Base {y1 + 1}, y {y1} {} ^ main.cpp: 5: 7: примечание: кандидат: Base :: Base () класс Base ^ ~~~ main.cpp: 5: 7: примечание: кандидат ожидает 0 аргументов, 1 предоставлено main.cpp: 5: 7: примечание: кандидат: constexpr Base :: Base (const Base &) main.cpp: 5: 7: примечание: нет известного преобразования дляаргумент 1 от 'int' до 'const Base &'
class Base
{
public:
int x;
virtual ~Base(){}
};
class D:public Base
{
public:
int y;
D(int y1):Base{y1+1},y{y1}{}
};
int main()
{
D d(5);
return 0;
}