- •Министерство образования и науки украины
- •Лабораторная работа № 1
- •Ход работы
- •Требования к отчетам
- •Отчёт должен содержать
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №2
- •Символы типа
- •Ход работы
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №3 Разработка программ со скалярными типами данных (2 часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №4 Разработка программ с циклическими вычислительными процессами
- •Теоретические сведения
- •Алгоритм работы оператора цикла for ():
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №5 Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... Else, условная операция (?:), оператор switch, оператор break, оператор goto (2 часа)
- •Теоретические сведения
- •Условная тернарная операция (?:)
- •Оператор варианта switch
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №6 Операции с, их приоритеты и использование. Преобразование типов (4 часа)
- •Теоретические сведения
- •Приоритет операций и порядок выполнения (ассоциативность)
- •Преобразование типов
- •(Новый_тип) операнд
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №7
- •Синтаксис определения функций в с
- •Использование локальных и глобальных переменных в функциях. Вызов функции
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №8 Разработка программ с указателями (2 часа)
- •Теоретические сведения
- •Основные операции с указателями
- •Указатели и целые величины
- •Динамическое размещение указателей в памяти
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №9 Массивы. Селективная обработка массивов
- •Теоретические сведения
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №10
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №11
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 12
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 13
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 14
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 15 Использование указателей для работы с составными типами данных (2часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 16
- •Указатели как параметры функции
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №17
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 18
- •Использование администратора проектов
- •Lab18.Cpp- Основной файл проекта
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 19
- •Доступ к пикселям
- •Графические примитивы
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №20 Разработка программ с использованием классов (2 часа)
- •Теоретические сведения
- •Объявление и определение класса
- •Тело класса
- •Использование класса
- •Инкапсуляция. Управление доступом к членам класса
- •Классы памяти для объектов
- •Использование данных-членов класса
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №21
- •Инициализация объектов класса
- •Деструкторы
- •Вызов деструкторов
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №22 Использование наследования для создания иерархии классов (2 часа)
- •Теоретические сведения
- •"Друзья" классов (friend)
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №23 Использование виртуальных и указателей для работы с объектами классов (2 часа)
- •Теоретические сведения
- •Виртуальные базовые классы
- •Виртуальные деструкторы
- •Ход работы
- •Литература
- •Выходные данные
Инициализация объектов класса
Объекты классов с конструкторами могут инициализироваться при помощи задаваемых в круглых скобках списков инициализаторов. Этот список используется как список передаваемых конструктору аргументов
main()
{
X one; // вызывается конструктор X::X() по умолчанию для объекта one
// класса Х
X two(1); // используется конструктор X::X(int)
X three = 1; // вызывается X::X(int) – альтернативная форма со знаком (=)
Х three(10, 8) // использовать нельзя, неоднозначно задан конструктор
// X::X(int а=5, int b=6)
X four = one; // вызывается X::X(const X&) для копирования
// объекта one в four
X five(two); // вызывает X::X(cont X&) для копирования объекта two в five
}
Конструктор воспринимает значения в качестве параметров и выполняет присваивание данным членам в теле функции конструктора. Определение конструктора как и любой функции-члена может производиться в теле класса
class X
{
int i, j;
public:
X(int a, int b) { i = a; j = b } // определение конструктора в классе, он имеет
// доступ к i и j
X(int a, int b) : a(i), b(j) {} // альтернативная форма для инициализации а и b
}; i(a), j(b)
В обоих случаях инициализации X x(1, 2) присваивает значение x::i=1 и значение x::j=2.
Деструкторы
Деструктор класса вызывается для разрушения элементов объекта до уничтожения самого объекта. Деструктор представляет собой функцию-член, имя которой совпадает с именем класса, перед которым стоит символ тильды (~). Деструктор не может воспринимать каких-либо параметров, а также не объявляет возвращаемого типа или значения.
class X
{…
public:
X(); // деструктор класса X
};
Если деструктор не объявлен для класса явно, компилятор генерирует его автоматически.
Вызов деструкторов
Вызов деструктора выполняется неявно, когда объект выходит из своей объявленной области действия. Для локальных переменных деструкторы вызываются, когда перестает быть активным блок, в котором они объявлены. В случае глобальных переменных деструкторы вызываются как часть процедуры выхода после функции main(). Необходимость деструкторов в значительной степени связана с указателями и динамическим выделением памяти.
Когда указатели, связанные с объектами, выходят за пределы области действия, неявного вызова деструктора не происходит. Это значит, что для уничтожения такого объекта оператор delete должен задаваться явно.
Деструкторы вызываются в обратной последовательности относительно вызова конструкторов, т.е. сначала вызываются деструкторы производных классов, потом базовых – вверх по иерархии.
При выходе из программы с использованием функции exit() деструкторы для каких-либо локальных переменных в текущей области действия не вызываются. Глобальные переменные уничтожаются в обычной последовательности.
При вызове abort() где-либо из программы деструкторы не вызываются даже для переменных глобальной области действия.
Деструктор может вызваться одним из двух способов: косвенно, через вызов delete, или непосредственно, путем задания полностью уточненного имени деструктора. Delete используется для уничтожения тех объектов, для которых память распределялась при помощи new. Явный вызов деструктора необходим только в случае объектов, которым при помощи вызова new динамически распределять память.
Примеры:
class X { {... X(); ... };
void* operator new(size_t size, void *ptr) { return ptr; } char buffer[sizeof(X)]; |
main() { X* pointer = new X; // память для // объекта класса Х выделена в куче X* exact_pointer;
exact_pointer = (Х)new(sizeif (X)&buffer) X; // указатель инициализируется адресом // буфера ... delete pointer; // delete служит // для разрушения указателя exact_pointer->X::-X(); // прямой вызов для отмены распределения // памяти } |