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

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

Конструкторы и деструкторы существенно улучшают работу с классами в языке программирования 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. Дело в том, что все переменные лучше делать либо private, либо protected. Доступ к переменным должен осуществляться только за счёт методов и конструкторов. Доступ к полям напрямую должен быть закрыт.


Дополнительно создадим два объекта и выведем информацию:

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 модификатор доступа, то мы можем ссылаться к ней отдельно. Лучше так не делать и для неё тоже установить модификатор private.


Также конструктор может не принимать параметров. В таком случае при создании объекта ничего не надо дополнительно передавать.


Деструкторы

Деструкторы работают в обратную сторону от конструкторов. Конструктор вызывается при создании объекта, а деструктор при удалении.

Пример создания деструктора:
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++ / Создание "Змейки"
3 урока
Изучение C++ от новичка до профи
Уроки Qt Creator | Графический интерфейс на С++
13 уроков
Комментарии для сайта Cackle