- •Лабораторная работа № 4
- •1. Цель работы
- •2. Краткие теоретические сведения
- •2.2. Свойства класса
- •2.3. Методы класса
- •2.4. Специальные методы класса: конструктор и деструктор
- •3. Наследование
- •4.2. Программные коды файлов
- •4. Пример создания иерархии из трех классов
- •4.1 Решение
- •4.3 Результат работы программы
- •9. Контрольные вопросы
2.2. Свойства класса
Классы содержат собственные переменные (свойства класса). Если образуется объект класса, то в его распоряжение предоставляется область оперативной памяти для хранения его свойств. Следовательно, каждый объект класса имеет собственную копию свойств. При создании объекта класса его свойства инициализируют с помощью конструктора класса. Свойства уничтожаются вместе с объектом класса, эти действия выполняет деструктор класса.
Свойства класса могут быть любого типа, кроме типа этого же класса. Они могут быть описаны с модификатором const, при этом они инициализируются один раз (с помощью конструктора класса) и не могут изменяться. Инициализация свойств при описании класса не допускается (это нужно делать в конструкторе).
Свойства класса могут быть описаны с атрибутами доступа public, protected или private.
2.3. Методы класса
Методы класса имеют доступ ко всем свойствам своего класса, могут быть определены как внутри класса, так и за его рамками. Они представляют единственную возможность доступа к private-свойствам своего класса. Методы класса могут быть определены с атрибутами доступа public, protected или private.
2.4. Специальные методы класса: конструктор и деструктор
Конструктор выделяет оперативную память для объекта класса и инициализирует его свойства. Он вызывается автоматически при создании объекта класса. Если при разработке структуры класса конструктор не был явно задан, то компилятор предоставляет конструктор по умолчанию. Конструктор по умолчанию предназначен только для выделения оперативной памяти для хранения свойств и методов класса. Для каждого объекта класса создается отдельная копия свойств. Методы класса не тиражируются.
Для конструкторов существует несколько важных правил:
имя конструктора совпадает с именем его класса;
конструктор не имеет никакого возвращаемого значения (даже void);
если конструктор описан явно, то конструктор по умолчанию не генерируется;
конструктор не наследуется.
Деструктор вызывается автоматически, если объекты классов становятся недействительными (например, при выходе за область определения или при вызове оператора delete для указателя на объект класса). Деструктор уничтожает объект и освобождает занимаемую им оперативную память.
Правила для деструктора аналогичны правилам для конструктора:
имя деструктора также совпадает с именем его класса, но предваряется символом «~» (тильдой):
~имя_класса();
деструктор не имеет никакого возвращаемого значения (даже void);
деструктор не имеет параметров;
если в классе деструктор явно не описан, то компилятор генерирует деструктор по умолчанию;
деструктор не наследуется (помечает память, занятую свойствами класса, как свободную).
Деструктор обязательно должен быть явно задан в классе, если в конструкторе используются операторы динамического выделения памяти (new и delete). Если этого не сделать, то память, занимаемая объектом, при его уничтожении не будет помечена как свободная.
3. Наследование
Синтаксис описания класса при наследовании:
class имя_класса: [private | public | protected] имя_базового_класса
{тело класса};
где private | public | protected – ключи доступа (см. табл. 2). По умолчанию используется ключ доступа private.
Простым называется наследование, при котором производный класс имеет один базовый класс. Если базовых классов несколько, то они перечисляются через запятую с указанием ключей доступа.
Таблица 2
Модификация атрибутов доступа с помощью ключей доступа
|
Ключ доступа |
Атрибут доступа в базовом классе |
Атрибут доступа в производном классе |
|
private |
private protected public |
– private private |
|
protected |
private protected public |
– protected protected |
|
public |
private protected public |
– protected public |
