Основы конструкторов и деструкторов
Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 10 из 104.
Конструктор — это специальный метод, который запускается автоматически при создании объекта. Деструктор запускается при уничтожении объекта.
Конструктор по умолчанию
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Конструктор с параметрами
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Перегрузка конструкторов — несколько конструкторов
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Деструктор — выполняется при уничтожении объекта
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Создание объектов с использованием различных конструкторов
Book book1; // Конструктор по умолчанию
Book book2("Harry Potter"); // Один параметр
Book book3("1984", 328); // Два параметраКонструкторы имеют то же имя, что и класс, и не имеют типа возвращаемого значения. Деструкторы используют ~ClassName() и вызываются автоматически в порядке, обратном порядку создания, когда объекты выходят из области видимости.
Задание
СреднеСоздайте класс Product с тремя перегруженными конструкторами и деструктором:
- Конструктор с 3 параметрами: name, price, stock
- Конструктор с 2 параметрами: name, price (stock = 0)
- Конструктор по умолчанию: name = "Unknown", price = 0, stock = 0
- Деструктор: выводит
"Destroying: <name>"
Шпаргалка
Конструктор — это специальный метод, который запускается автоматически при создании объекта. Деструктор запускается при уничтожении объекта.
Конструктор по умолчанию — инициализирует значениями по умолчанию:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Параметризованный конструктор — принимает параметры:
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Перегрузка конструкторов — несколько конструкторов с разными параметрами:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Деструктор — запускается при уничтожении объекта, использует ~ClassName():
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Создание объектов с использованием различных конструкторов:
Book book1; // Конструктор по умолчанию
Book book2("Harry Potter"); // Один параметр
Book book3("1984", 328); // Два параметраКонструкторы имеют то же имя, что и класс, и не имеют типа возвращаемого значения. Деструкторы вызываются автоматически в порядке, обратном порядку создания, когда объекты выходят из области видимости.
Попробуйте сами
#include <iostream>
#include "Product.h"
int main() {
std::string name;
int price, stock;
std::getline(std::cin, name);
std::cin >> price >> stock;
Product product1(name, price, stock);
Product product2("Keyboard", 79);
Product product3;
std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыСборка и компиляция C++Заголовочные файлы и файлы исходного кодаПространства имен и область видимостиВведение в ООП на C++Классы и объектыУказатель 'this'Методы (функции-члены)Атрибуты (члены данных)Основы конструкторов и деструкторовИтоги — Простой калькулятор4Свойства классов
Члены экземпляра против статическихГеттеры и сеттерыКонстантные функции-членыКлючевое слово mutableСтатические методы и переменныеДружественные функции и классыИтоги — Менеджер банковских счетов7Наследование
Основы наследованияУровни доступа при наследованииПорядок вызова конструкторов и деструкторовПереопределение методовВиртуальные функции и VTableМножественное наследованиеВиртуальное наследованиеИтоги — Иерархия сотрудников10Обзор STL
Обзор и философия STLКонтейнеры STLИтераторыАлгоритмы STLФункторы и лямбда-выраженияИтоги: частота слов13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonFactory и Abstract FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy2Управление памятью
Стек и кучаУказатели и ссылкиДинамическая память (new/delete)Умные указатели в C++RAII в C++Итоги — Менеджер динамического массива5Инкапсуляция
Спецификаторы доступа в C++Спецификаторы доступа: подробный разборСокрытие данныхStruct против ClassВложенные и внутренние классыИтоги — Система учета студентов8Полиморфизм
Полиморфизм компиляции и времени выполненияПерегрузка функцийВиртуальные функции: повторениеЧистые виртуальные функцииАбстрактные классыПроектирование интерфейсов на C++Dynamic Casting и RTTIИтоги: Калькулятор фигур11Продвинутые концепции ООП
Композиция против наследованияМиксины через CRTPИдиома PimplСтирание типовEnum Classes и строгая типизацияОбработка исключений в ООППользовательские иерархии исключений14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикRAII как паттерн3Конструкторы и деструкторы
Конструктор по умолчаниюПараметризованный конструкторКонструктор копированияКонструктор перемещенияСписки инициализации конструктораДелегирующие конструкторыГлубокое погружение в деструкторыПравило трех / пяти / нуляПовторение — класс String6Перегрузка операторов
Введение в перегрузку операторовПерегрузка арифметических операторовПерегрузка операторов сравненияОператоры потоковПерегрузка оператора присваиванияПерегрузка операторов [] и ()Операторы преобразования типовИтоги — класс Matrix9Шаблоны
Шаблоны функцийШаблоны классовСпециализация шаблоновВариативные шаблоныОсновы SFINAE и Type TraitsИтоги — Обобщенный контейнер