При создании любого объекта автоматически происходит перегрузка нескольких операций а именно:
-Конструктор
Он перегружаеться для создания и инициализации объекта.Если не определить собственный - то компилятор сделает это за вас.
-Деструктор
Деструктор вызывается при удаления объекта и освобождает ресурсы занятые объектом.Если не определить собственный - то компилятор сделает это за вас.
-Конструктор копирования
Этот конструктор копирует значения членов одного объекта в другой объект того же типа.Если не определить собственный - то компилятор сделает это за вас.
-Оператор присваивания
Если вы не определите собственный оператор присваивания (operator=), компилятор сгенерирует его для вас. Этот оператор копирует один объект в другой, что позволяет выполнить присваивание между объектами.
-Конструктор перемещения
Представляет альтернативу конструктору копирования в тех ситуациях, когда надо сделать копию объекта, но копирование данных нежелательно - вместо копирования данных они просто перемещаются из одной копии объекта в другую.
"Если не определить собственный - то компилятор сделает это за вас."
Давайте посмотрим на код и сами в этом убедимся:
#include <iostream>
class Chiken {
private:
int m_age;
std::string m_name;
public:
Chiken(int age, std::string name) :m_age(age), m_name(name) {
std::cout << "Constructor called" << std::endl;
}
int GetAge() const { return m_age; }
std::string GetName() const { return m_name; }
};
int main() {
Chiken chik1;
std::cout<<chik1.GetName();
}
Такой код не получиться запустить так как не существует конструктора по умолчанию.
Для того чтобы исправить этот код нужно либо сделать автоматические значения либо перегрузить конструктор без параметров.
Код:
#include <iostream>
class Chiken {
private:
int m_age;
std::string m_name;
public:
Chiken(int age = 0, std::string name = "Unnamed") :m_age(age), m_name(name) {
std::cout << "Constructor called" << std::endl;
}
int GetAge() const { return m_age; }
std::string GetName() const { return m_name; }
};
int main() {
Chiken chik;//вызов конструктора
Chiken chik1(12,"Vasya");//вызов конструктора
std::cout<<chik.GetName()<<std::endl;
Chiken chik2 = chik1;//Оператор присваивания
Chiken chik3(chik2); //Копирования конструктора
std::cout << chik3.GetAge();
}// вызов деструктора