C++ Chanel: post #139 — TG.ME

Что автоматически перегружаеться при создании объекта с++?

При создании любого объекта автоматически происходит перегрузка нескольких операций а именно:

-Конструктор
Он перегружаеться для создания и инициализации объекта.Если не определить собственный - то компилятор сделает это за вас.

-Деструктор
Деструктор вызывается при удаления объекта и освобождает ресурсы занятые объектом.Если не определить собственный - то компилятор сделает это за вас.

-Конструктор копирования
Этот конструктор копирует значения членов одного объекта в другой объект того же типа.Если не определить собственный - то компилятор сделает это за вас.

-Оператор присваивания
Если вы не определите собственный оператор присваивания (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();
}// вызов деструктора
April 24, 2024 1.1K 4