
- •1)Классы, объявление классов, спецификаторы доступа.
- •2)Классы, поля классов, инкапсуляция.
- •3)Методы и их реализация на примере класса «Комплексное число».
- •4)Создание объектов. Объекты и методы.
- •5)Конструкторы, виды конструкторов.
- •6) Конструктор по умолчанию, конструктор с параметрами.
- •7)Конструктор преобразования, конструктор копии.
- •8) Деструкторы
- •9)Перегрузка операций.
- •10) Стековые и динамические объекты, указатели и ссылки, достоинства и недостатки стековых объектов.
- •Размещение в стеке
- •Динамическое размещение
- •Указатели и ссылки
- •Недостатки стековых объектов
- •Достоинства стековых объектов
- •11) Указатели, арифметика указателей.
- •12)Указатель на константу, константный указатель, константный указатель на константу, константные аргументы функций, константные функции классов.
- •Константные переменные
- •Константы в перечислениях
- •Указатель на константу
- •Константный указатель
- •Константный указатель на константу
- •Константные аргументы функций
- •Неконстантные аргументы функций
- •Константные функции классов
- •13)Механизмы передачи параметров в функции, аргументы по умолчанию, указатель на функцию.
- •14)Дружественные функции (методы).
- •15)Статические поля и методы.
- •16) Инкапсуляция, ее реализация через понятие class.
8) Деструкторы
Деструктор — это особый вид метода, применяющийся для освобождения памяти,
занимаемой объектом. Деструктор вызывается автоматически, когда объект
выходит из области видимости:
• для локальных объектов — при выходе из блока, в котором они объявлены;
• для глобальных — как часть процедуры выхода из main:
• для объектов, заданных через указатели^ деструктор вызывается неявно при
использовании операции delete.
При выходе из области действия указателя на объект автоматический вызов деструктора
объекта не производится.
Имя деструктора начинается с тильды (~), непосредственно за которой следует
имя класса. Деструктор:
• не имеет аргументов и возвращаемого значения;
• не может быть объявлен как const или static;
• не наследуется;
• может быть виртуальным
Если деструктор явным образом не определен, компилятор автоматически создает
пустой деструктор.
Описывать в классе деструктор явным образом требуется в случае, когда объект
содержит указатели на память, выделяемую динамически ~ иначе при уничтожении
объекта память, на которую ссылались его поля-указатели, не будет помечена
как свободная. Указатель на деструктор определить нельзя.
Пример
#include <iostream>
using namespace std;
class NameOfClass
{
private:
int a;
public:
NameOfClass(int m);
~NameOfClass();
};
NameOfClass::~NameOfClass() (ДЕСТРУТОР)
{
cout << this->a << endl;
}
NameOfClass::NameOfClass(int m)
{
a = m;
}
9)Перегрузка операций.
Перегрузкой называется практика придания нескольких значений оператору или функции. Выбор конкретного значения зависит от типов аргументов, полученных оператором или функцией. Большинство операторов С++ может быть перегружено. Часто используют перегрузку оператора + (например, для представления конкатенации строк).
Для осуществления такой перегрузки потребуется ввести понятие дружественной функции (friend). Функция, определенная таким образом, получает доступ к закрытым членам переменной класса, т.е. не являясь членом класса обладает его привилегиями. Кроме того, для перегрузки используется ключевое слово operator (пишется перед знаком перегружаемой операции и вместе с ним заменяет то, что было бы именем функции в ее обычном объявлении).
Перепишем определение класса Complex:
// определение класса комплексных чисел
class Complex
{
public:
int real; // вещественная часть
int imaginary; // мнимая часть
// прибавить комплексное число
Complex operator+(const Complex x) const;
};
Вместо метода Add появился метод operator+. Изменилось и его определение. Во-первых, этот метод возвращает значение типа Complex ( операция сложения в результате дает новое значение того же типа, что и типы операндов). Во-вторых, перед аргументом метода появилось ключевое слово const. Это слово обозначает, что при выполнении данного метода аргумент изменяться не будет. Также const появилось после объявления метода. Второе ключевое слово const означает, что объект, выполняющий метод, не будет изменен. При выполнении операции сложения x + y над двумя величинами x и y сами эти величины не изменяются. Теперь запишем определение операции сложения:
Complex
Complex::operator+(const Complex x) const
{
Complex result;
result.real = real + x.real;
result.imaginary = imaginary + x.imaginary;
return result;
}