30. C++ Делегирующие конструкторы

Делегирующие конструкторы

Аналогично вызову конструктора базового класса из класса наследника можно принудительно вызывать один конструктор другим внутри ОДНОГО класса:

синтаксис такой:

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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *