Делегирующие конструкторы
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;
}Сначала вызовется конструктор
Human(name)где заполнится имя и остальные поля инициализируются нулями.Затем вызовется уже конструктор
Human(string name, int weight)где полеweightинициализируется уже согласно переданному параметру.
Last updated