Наследование в C ++: порядок построения

#include<iostream>
using namespace std;

class Parent
{
public:
Parent ( )
{
cout << "P";
}
};

class Child : public Parent
{
public:
Child ( )
{
cout << "C";
}
};

int main ( )
{
Child obj1;
Child obj2 ( obj1 );

return 0;
}

Вот что происходит в этой программе:

=> An object of the class 'Child' named 'obj1' is created
=> Call to the constructor of the 'Child' class is made
=> Call to the constructor of the 'Parent' class is made
=> "P" is printed
=> Control transferred back to 'Child ( )'
=> "C" is printed

=> An object 'obj2' of the class 'Child' is created as a copy of 'obj1'
=> Call to the copy constructor of the 'Child' class is made
=> Call to the copy constructor of the 'Parent' class is made

Что дальше? Где находится копия — родительский конструктор копий Child’s? Куда все перемещается, прежде чем вернуться в main ()?

1

Решение

Поскольку вы не определили никакого специального конструктора копирования, компилятор предоставил стандартный конструктор.

Конструктор копирования по умолчанию вызывает конструктор копирования базового класса, а затем выполняет членская копия.

Поскольку в ваших классах нет членов-данных, код вызова члена не вызывается.

Чтобы лучше изучить и понять поток выполнения кода, вы можете определить собственные конструкторы копирования с некоторыми cout отслеживание, например:

class Parent
{
public:
...

Parent(const Parent& source)
{
std::cout << "Parent copy constructor" << std::endl;
}
};

// ...similar for Child
2

Другие решения


По вопросам рекламы [email protected]