
- •1)Указатели.
- •3) Инициализация указателей
- •5) Операции с указателями
- •33) Связные структуры данных: стек- описание и операции со стеком.
- •35) Связные структуры данных: очередь- описание и операции.
- •37) Связные структуры данных: список- описание и операции.
- •7) Массивы. Описание одномерных и многомерных массивов, инициализация.
- •9) Ввод и вывод массивов, два способа: с выбором элемента по индексу и с выбором элемента по указателю.
- •27) Передача массивов в качестве параметров.
- •19) . Способы обмена данными: с помощью глобальных переменных.
- •21) Способы обмена данными: Возвращаемое значение.
- •23) Способы обмена данными: Параметры функции.
- •25) Передача параметров по значению и по адресу.
- •29) Параметры со значениями по умолчанию.
- •13) Типы данных, определяемые пользователем: структуры.
- •15)Типы данных, определяемые пользователем: объединения.
- •11) Типы данных, определяемые пользователем: перечисления.
- •4) Понятие класса. Описание класса (Паскаль). Поля и методы. Пример
- •При описании нового объекта с инициализацией другим объектом;
- •При передаче объекта в функцию по значению;
- •При возврате объекта из функции.
- •16) Конструктор и деструктор, их свойства (Паскаль).
- •8) Описание объектов (экземпляров класса) Способы обращения к полям объекта. (Паскаль).
- •17) Функции. Объявление и определение, заголовочные файлы в с и предописания (forward) в Паскале.
- •31) Перегрузка функций.
- •39) Понятие ооп Основные свойства ооп (инкапсуляция, наследование, полиморфизм).
- •24) Виртуальные методы и абстрактные классы.
16) Конструктор и деструктор, их свойства (Паскаль).
Конструкторы и деструкторы являются специализированными формами методов. Используемые в связи с расширенным синтаксисом стандартных процедур New и Dispose, конструкторы и деструкторы обладают способностью размещения и удаления динамических объектов. Кроме того, конструкторы имеют возможность выполнить требуемую инициализацию объектов, содержащих виртуальные методы. Как и все другие методы, конструкторы и деструкторы могут наследоваться, а объекты могут содержать любое число конструкторов и деструкторов
Конструкторы используются для инициализации вновь созданных объектов. Обычно инициализация основывается на значениях, передаваемых конструктору в качестве параметров. Конструктор не может быть виртуальным, так как механизм диспетчеризации виртуального метода зависит от конструктора, который первым совершил инициализацию объекта.
Приведем несколько примеров конструкторов:
constructor Field.Copy(var F: Field);
begin
Self := F;
end;
constructor Field.Init(FX, FY, FLen: integer; FName: string);
begin
X := FX;
Y := FY;
GetMem(Name, Length (FName) + 1);
Name^ := FName;
end;
constructor TStrField.Init(FX, FY, FLen: integer; FName: string);
begin
inherited Init(FX, FY, FLen, FName);
Field.Init(FX, FY, FLen, FName);
GetMem(Value, Len);
Value^ := '';
end;
Главным действием конструктора порожденного (дочернего) типа, такого как указанный выше TStrField.Init, почти всегда является вызов соответствующего конструктора его непосредственного родителя для инициализации наследуемых полей объекта. После выполнения этой процедуры, конструктор инициализирует поля объекта, которые принадлежат только порожденному типу.
Деструкторы ("сборщики мусора") являются противоположностями конструкторов и используются для очистки объектов после их использования. Обычно очистка состоит из удаления всех полей-указателей в объекте. Примечание: Деструктор может быть виртуальным и часто является таковым. Деструктор редко имеет параметры. Приведем несколько примеров деструкторов:
destructor Field.Done;
begin
FreeMem(Name, Length (Name^) + 1);
end;
6) Описание объектов (экземпляров класса) Способы обращения к полям объекта. (С++).
Конкретные переменные типа «класс» называются экземплярами класса, или объектами. Время жизни и видимость объектов зависит от вида и места их описания и подчиняется общим правилам С++:
monstr Vasia: // Объект класса monstr с параметрами по умолчанию
monstr Super(200. 300): // Объект с явной инициализацией
monstr stado[100]: // Массив объектов с параметрами по умолчанию
monstr *beavis = new monstr (10): // Динамический объект(второй параметр задается по умолчанию)
monstr &butthead = Vasia: // Ссылка на объект
При создании каждого объекта выделяется память, достаточная для хранения всех eib полей, и автоматически вызывается конструктор, выполняющий их инициализацию. Методы класса не тиражируются. При выходе объекта из области действия он уничтожается, при этом автоматически вызывается деструктор .
Доступ к элементам объекта аналогичен доступу к полям структуры. Для этого используются операция . (точка) при обращении к элементу через имя объекта и операция -> при обращении через указатель, например:
int n = Vasia.get_ammo();
stado[5].draw;
cout « beavis->get_health();
Обратиться таким образом можно только к элементам со спецификаторам public. Получить или изменить значения элементов со спецификатором private можно только через обращение к соответствующим методам. Можно создать константный объект, значения полей которого изменять запрещается. К нему должны применяться только константные методы:
class monstr{int get_health() const {return health;}}:
const monstr Dead(Q,0); // Константный объект
cout « Dead.get_health();
Константный метод:
• объявляется с ключевым словом const после списка параметров; а не может изменять значения полей класса;
• может вызывать только константные методы;
• может вызываться для любых (не только константных) объектов.
Рекомендуется описывать как константные те методы, которые предназначены для получения значений полей.