- •Министерство образования российской федерации
- •Введение
- •Программирование функций
- •Основные теоретические положения
- •Задания
- •Контрольные вопросы
- •Обработка массивов
- •Основные теоретические положения
- •1. Определение массивов
- •2. Массивы и указатели
- •3. Передача массивов функциям
- •Задания
- •Контрольные вопросы
- •Задания
- •Контрольные вопросы
- •Разработка абстрактных типов данных
- •Основные теоретические положения
- •1. Определение классов
- •3. Дружественные функции
- •4. Указатель this
- •5. Статические компонентные данные и компонентные функции static и const
- •6. Изменчивость
- •7. Вложенные классы
- •Задания
- •Контрольные вопросы
- •Раздел V создание и уничтожение объектов класса
- •Основные теоретические положения
- •Задания
- •Контрольные вопросы
- •Рекомендуемая литература
- •Раздел I. Программирование функций 4
Контрольные вопросы
Дайте определение понятия «класс». Сформулируйте правила доступа к его элементам.
С какой целью в классе объединены компонентные данные и компонентные функции?
Каким образом осуществляется доступ к открытым и закрытым элементам?
Опишите назначение дружественных функций, назовите их разновидности.
Что понимается под указателем this?
Каковы особенности использования статических компонентных данных?
В чем заключается синтаксис и семантика компонентных функций static и const?
Каким образом могут изменяться компонентные данные объектов, объявленных константами?
Каковы особенности создания вложенных классов?
Раздел V создание и уничтожение объектов класса
Цель работы:изучить синтаксис и семантику определения и вызова конструкторов и деструкторов; приобрести практические навыки создания и уничтожения объектов; изучить особенности применения различных видов конструкторов.
Основные теоретические положения
Определение конструктора и деструктора
Конструктор (constructor) – это компонентная функция, предназначенная для создания объектов типа своего класса. Под созданием понимается инициализация компонентных данных и при необходимости распределения под них свободной памяти с помощью new. Имя конструктора совпадает с именем класса.
Деструктор (destructor) – это компонентная функция, предназначенная для уничтожения объектов типа своего класса. Под уничтожением понимается освобождение свободной памяти с помощью delete. Имя деструктора – это предваряемое символом «~» Имя класса.
Конструктор по умолчанию
Классы с конструктором по умолчанию могут использоваться для объявления массивов.
Н а п р и м е р :
type m[10];
является объявлением массива из десяти объектов типа type, при этом используется конструктор по умолчанию:
type :: type( ) {…..} // список аргументов пустой
или
type :: type(int i = 0) {……} // все аргументы имеют значения по умолчанию
Копирующий конструктор
Копирующий конструктор предназначен для копирования одного значения типа класса в другое и имеет вид
type :: type (const type & x)
Копирующий конструктор вызывается в следующих случаях:
если объект типа type инициализируется значением типа type;
когда параметр типа type передается функции по значению;
когда функция возвращает значение типа type.
При отсутствии копирующего конструктора эти действия по умолчанию выполняются поэлементно.
Конструктор – функция преобразования типа
Конструктор с одним параметром автоматически является функцией преобразования типа параметра к типу класса.
Н а п р и м е р :
type :: type (int); // преобразует int к type.
Использование explicit в начале объявления запрещает такое преобразование.
Инициализаторы конструктора
Класс, содержащий элементы, тип которых требует конструктор, использует инициализаторы – разделенный запятыми список вызовов конструкторов, стоящий после двоеточия. Конструктор вызывается с помощью имени элемента, за которым в круглых скобках следует список аргументов. Элементы инициализируются в порядке объявления их в классе.
Н а п р и м е р :
type :: type (int t): i(7), j(t) //инициализаторы
{// остальное тело конструктора}
Инициализаторы необходимы всегда для нестатических элементов констант или ссылок.
Конструкторы и деструкторы не наследуются. В отличие от деструкторов конструкторы не могут быть виртуальными.
П р и м е р :
class vector{
public:
explicit vector (int n = 10); // константа по умолчанию
vector (const vector & v); // копирующая константа
vector (const int a[ ], int n); // конструктор с параметрами
~vector ( ) {delete [ ] p;} // деструктор
-- -- -- --
-- -- -- --
private:
int *p; // базовый адрес массива
int size; // число элементов массива
};