Делегирующие конструкторы
Аналогично вызову конструктора базового класса из класса наследника можно принудительно вызывать один конструктор другим внутри ОДНОГО класса:
синтаксис такой:
Myclass(arg1){//code with arg1}
MyClass(arg1, arg2) : Myclass(arg1){//code with arg2}
Например:
Пусть у нас есть класс employer (работник)
class Employer
{
public:
Employer(string Name)
{ this->Name= Name;
this->age= 0;
this->position=”нет данных”; //Должность
}
Employer(string Name, unsigned int age) : Employer(Name)
{
this->age= age;
}
Employer(string Name, unsigned int age, string position) : Employer(Name, age)
{
this->position= position; //Должность
}
protected:
string Name;
unsigned int age;
string position; //Должность
};
При создании объекта класса с параметрами, например:
Employer c_employer(“Ivan”, 30, Engineer);
Будет вызван конструктор от 3 параметров, который сразу вызовет конструктор от 2 параметров, и который сразу вызовет конструктор от 1 параметра.
Внутри конструктора от 1 параметра проинициализируются все поля (в т.ч. дефолтными значениями) и управление перейдет конструктору с 2 параметрами, который переинициализирует поле age и передаст управление конструктору с 3 параметрами, который переинициализирует поле position.