Базовый класс, производный класс или оба класса вместе могут иметь конструкторы и/или деструкторы.
Если у базового и у производного классов имеются конструкторы и деструкторы, то конструкторы выполняются в порядке наследования, а деструкторы - в обратном порядке. Таким образом, конструктор базового класса выполняется раньше конструктора производного класса. Для деструкторов правилен обратный порядок: деструктор производного класса выполняется раньше деструктора базового класса.
Синтаксис передачи аргументов из производного в базовый класс показан ниже:
конструктор_произв_класса(список-арг) : базов_класс (список_арг) {
// тело конструктора производного класса
Для базового и производного классов допустимо использовать одни и те же аргументы. Кроме этого, для производного класса допустимо игнорирование всех аргументов и передача их напрямую в базовый класс.
В этой очень короткой программе показано, в каком порядке выполняются конструкторы и деструкторы базового и производного классов:
#include <iostream>
using namespace std;
class base {
public:
base() { cout ≪ "Работа конструктора базового класса \n"; }
~base ( ) { cout ≪ "Работа деструктора базового класса \n"; }
};
class derived: public base (
public:
derived() ( cout ≪ "Работа конструктора производного класса\n";}
~derived () ( cout ≪ "Работа деструктора производного класса\n";}
};
int main ()
{
derived о;
return 0;
}
После выполнения программы на экран выводится следующее:
Работа конструктора базового класса
Работа конструктора производного класса
Работа деструктора производного класса
Работа деструктора базового класса