Menu
Coddy logo textTech

Основы конструкторов и деструкторов

Часть раздела Объектно-ориентированное программирование путешествия по 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() и вызываются автоматически в порядке, обратном порядку создания, когда объекты выходят из области видимости.

challenge icon

Задание

Средне

Создайте класс 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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование