Я посмотрел на подобные запросы, но, похоже, я теряюсь. У меня есть простой пример, поэтому, пожалуйста, учтите следующее:C++: Какой конструктор называется первым?
#include <iostream>
using namespace std;
class Animal
{
public:
Animal() {cout << "Animal" << endl;}
};
class Cat : public Animal
{
public:
Cat() {cout << "Cat" << endl;};
};
int main()
{
Cat c;
return 0;
}
При запуске программы она отображает
Animal
Cat
Мой вопрос теперь это: Какой конструктор на самом деле называется первым. Вызывается Cat(), а затем Cat() вызывает Animal() до того, как он выполнит его содержимое. ИЛИ выполняет ли компилятор/программа на Cat(), видит, что это Animal() и вызывает Animal() сначала, затем Cat() ?
Возможно, последнее, но почему это имеет значение? – PherricOxide
Скорее всего, что Cat вызывается первым, а затем запускает конструктор Animal перед печатью «Cat». Но если вы действительно хотите проверить это, настройте статическую переменную и распечатайте, а затем увеличьте ее, чтобы увидеть, какой из них выполняется первым. – Radnyx
Вызывается 'Cat()', во-первых, он вызывает все базовые конструкторы в соответствующем порядке, затем 'vptr', если нужно (я думаю), и список инициализаторов, а затем его собственное тело. – lapk