C++

С++ программирование / Уроки C++

26 уроков 40 заданий Справочник Компилятор
/ Видеокурсы / С++ программирование / Уроки C++ / Урок #19 - Конструкторы и деструкторы

Урок #19 - Конструкторы и деструкторы

Урок #19 - Конструкторы и деструкторы


C++

Конструкторы и деструкторы существенно улучшают работу с классами в языке программирования C++. Благодаря ним вы можете создавать объекты на основе классов и сразу инициализировать ряд переменных.

Видео урок:

Конструктор класса это очень удобная вещь, ведь он позволяет установить значения переменным сразу же при создании объекта. Конструктор класса должен называться точно также как сам класс. Пример создания конструктора показан ниже:
class Book {
private:
    int pages;
    float weight;
public: 
    char name;

    void getInfoBook () {
        cout << "В книге " << name << " находиться " << pages << " страниц. " << endl;
        cout << "При этом она весит " << weight << endl;
    }    
    
    Book (int _pages, float _weight) {
      pages = _pages;
      weight = _weight;
    }
    
    Book (int _pages, float _weight, char _name) {
      pages = _pages;
      weight = _weight;
      name = _name;
    }
};
Как мы видим, в одном классе может быть сразу несколько конструкторов, поэтом при создании объекта мы можем передавать разное количество параметров и разный тип параметров. Компилятор сам определяет какой конструктор необходимо использовать в зависимости от передаваемых параметров. Кроме того, мы сделали переменные теперь с модификатором private, так как мы их используем только в самом классе и нам не надо чтобы где-то еще можно было иметь доступ к ним.

Дополнительно создадим два объекта и выведем информацию:
int main() {
    Book sherlock_holms(460, 1.7f); // Используем 1 конструктор
    sherlock_holms.name = 'S'; // Устанавливаем вручную значение для name
    sherlock_holms.getInfoBook ();
        
    Book green_mile(750, 2.8f, 'G'); // Используем второй конструктор
    green_mile.getInfoBook ();
    
    return 0;
}
Поскольку переменная name имеет public модификатор доступа, то мы можем её отдельно изменить. Также конструктор может не принимать параметров. Тогда при создании объекта ничего не надо дополнительно передавать.

Деструкторы

Благодаря деструкторам мы можем обработать какой-либо код после того, как объект будет создан и все действия будут завершены. В классе может быть лишь один деструктор и он должен называться точно также как класс:
class Some {
public:
    ~Some () {
        cout << "Работа с объектом завершена. Он полностью создан";
    }
};

Исходный код

Конструкторы и деструкторы
using namespace std;

class Auto {
private:
    int year, month, day;
public:
    Auto () {
        year = 2000;
        month = 12;
        day = 31;
        
        get();
        cout << endl;
    }
    
    Auto (int date_year, int date_month, int date_day) {
        year = date_year;
        month = date_month;
        day = date_day;
        
        get();
        cout << endl;
    }
    
    void message () {
        cout << "Class is working!" << endl;
    }
    
    void set (int date_year, int date_month, int date_day) {
        year = date_year;
        month = date_month;
        day = date_day;
    }
    
    void get () {
        cout << "Year of this auto is - " << year << ", month is - " << month << ", day is - " << day << endl;
    }
    
    ~Auto () {
        cout << "Class is not working" << endl;
    }
};

int main(int argc, const char * argv[]) {
    
    Auto shkoda (2015, 2, 13);
    shkoda.message();
    shkoda.set(2005, 11, 23);
    shkoda.get();
    
    Auto bmw;
    bmw.set(2012, 1, 11);
    bmw.get();
    
    cin.get();
    return 0;
}

Онлайн редактор кода

Загрузка...

Домашнее задание

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям!

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы получить большое задание. Такие задания есть к каждому курсу. В них входит задание, методика решения, а также "Готовое решение".
PS: подобные задания доступны только при подписке от 1 месяца!

C++

Также стоит посмотреть