
#20 – Конструкторы, деструкторы и указатель this
Видеоурок
Конструктор класса очень удобен и по своему виду схож с обыкновенными функциями. За счёт конструктора мы можем установить значения для объекта сразу при его создании.
Конструктор должен иметь одинаковое название с классом. Пример создания конструктора показан ниже:
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.
Также конструктор может не принимать параметров. В таком случае при создании объекта ничего не надо дополнительно передавать.
Указатель this
За счёт указателя this
мы можем точно указать откуда берутся данные. При работе с данными внутри одного класса часто необходимо обратить к полям или методом самого класса. Чтобы не возникало конфликтов имен можно использовать указать «this».
Пример работы:
class Some {
private
int test;
public:
void set (int test) {
this->test = test;
}
};
При использовании указателя данный код не вызовит ошибок и все обработается корректно.
Деструкторы
class Some {
public:
~Some () {
cout << "Работа с объектом завершена.";
}
};
Исходный код
Весь код будет доступен после подписки на проект!
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть