Вітаємо вас на нашому шляху через Об'єктно-орієнтоване програмування (OOP) в C++!
У цій частині ми поглибимося в такі концепти, як конструктори, деструктори, друзі-функції та багато іншого.
Тож давайте зануримося 🙂
Що таке Конструктор?
Конструктор — це спеціальна функція в класі, яка автоматично ініціалізує об'єкти, коли вони створюються.
Ключові моменти про конструктори:
- Назва конструктора збігається з назвою класу.
- Він викликається автоматично при створенні об'єкта.
- У конструктора немає типу повернення — навіть
void
. - Конструктори можуть бути перевантажені (можна визначити кілька конструкторів з різними параметрами).
Типи конструкторів
1. Конструктор за замовчуванням
Конструктор без параметрів. Ініціалізує об'єкти значеннями за замовчуванням.
class ABC {
int x;
public:
ABC() { // Конструктор за замовчуванням
x = 0;
std::cout << "Викликано конструктор за замовчуванням!" << std::endl;
}
};
int main() {
ABC obj; // Тут викликається конструктор за замовчуванням
return 0;
}
2. Параметризований конструктор
Цей конструктор приймає аргументи для ініціалізації об'єкта.
class ABC {
int x;
public:
ABC(int y) { // Параметризований конструктор
x = y;
std::cout << "Викликано параметризований конструктор!" << std::endl;
}
};
int main() {
ABC obj(10); // Передаємо 10 у конструктор
return 0;
}
3. Конструктор копіювання
Використовується для створення копії об'єкта.
class ABC {
int x;
public:
ABC(int y) { x = y; } // Параметризований конструктор
ABC(const ABC &obj) { // Конструктор копіювання
x = obj.x;
std::cout << "Викликано конструктор копіювання!" << std::endl;
}
};
int main() {
ABC obj1(10); // Викликається параметризований конструктор
ABC obj2 = obj1; // Викликається конструктор копіювання
return 0;
}
Що таке Деструктор?
Деструктор — це "прибиральник" для вашого об'єкта. Він автоматично викликається, коли об'єкт виходить з області видимості або коли його явно знищують.
Ключові моменти про деструктори:
- Назва деструктора збігається з назвою класу, але починається з тильди (
~
). - Він не приймає аргументів і не повертає значення.
- Для класу існує лише один деструктор.
- Використовується для звільнення ресурсів, таких як пам'ять.
Приклад:
class ABC {
public:
ABC() {
std::cout << "Викликано конструктор!" << std::endl;
}
~ABC() { // Деструктор
std::cout << "Викликано деструктор!" << std::endl;
}
};
int main() {
ABC obj; // Викликається конструктор
return 0; // Деструктор викликається автоматично тут
}
Друзі-функції та класи
- Дружня функція (friend function) може отримати доступ до приватних та захищених членів класу, навіть якщо вона не є членом класу.
- Подібно до цього, дружній клас (friend class) може отримати доступ до приватних/захищених членів іншого класу.
Приклад:
class ABC {
private:
int x;
public:
ABC(int val) : x(val) {}
friend void display(ABC obj); // Оголошення дружньої функції
};
void display(ABC obj) { // Означення дружньої функції
std::cout << "Значення x: " << obj.x << std::endl;
}
int main() {
ABC obj(10);
display(obj); // Викликається дружня функція
return 0;
}
Висновок
Тепер ви добре розумієте такі концепти, як конструктори, деструктори, віртуальні функції та абстрактні класи, зміцнивши своє розуміння OOP в C++.
З цим завершується наша серія C++ OOPs: One Shot. Слідкуйте за наступною цікавою серією!
Перекладено з: C++ OOPs — Constructors, Destructors & Friend Function : One Shot