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

Делегирующие конструкторы необходимы для того, что бы не повторять один и тот же код. Например в одном конструкторе мы уже инициализировали поля которые не были переданы через параметр и что бы в каждом конструкторе не повторять один и тот же код мы делегируем это на конструктор где это уже реализовано.

class Human
{
private:
    string name;
    int weight;
    int age;

public:


    Human(string name) // только имя
    {
        this->name = name;

        this->weight = 0;
        this->age = 0;
    }

    Human(string name, int weight) : Human(name) // имя и вес
    {
        this->weight = weight;
    }

    Human(string name, int weight, int age) : Human(name, weight) // все параметры
    {
        this->age = age;
    }


};

Класс human имеет 3 поля: name , weight , age

Если мы создаем объект класса human только с полем name , то остальные поля инициализируются нулями. Что бы в каждом конструкторе с другими параметрами не повторять код инициализации неизвестных полей мы используем делегирование на конструктор где этот функционал уже присутствует.

Таким образом если мы вызовем конструктор:

Human(string name, int weight) : Human(name) // делегирование
    {
        this->weight = weight;
    }
  1. Сначала вызовется конструктор Human(name) где заполнится имя и остальные поля инициализируются нулями.

  2. Затем вызовется уже конструктор Human(string name, int weight) где поле weight инициализируется уже согласно переданному параметру.

сначала вызывается делегируемый конструктор, потом тело текущего

Last updated