Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы все_001.doc
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
238.59 Кб
Скачать

25. Виртуальные функции. Переопределение виртуальных функций.

Виртуальная функция – это функция, которая объявляется в базовом классе с использованием ключевого слова virtual и переопределяется в одном или нескольких производных классах. Таким образом, если базовый класс содержит виртуальную функцию и если из этого базового класса выведено два(или больше) производных класса, то при адресации различных типов объектов через указатель (или ссылку)на базовый класс будут выполняться и различные версии виртуальной функции.

При переопределении виртуальной функции в производном классе ключевое слово virtual повторять не нужно.

Тип и количество параметров у версий переопределенной функции должны совпадать, иначе она будет просто перегруженной и механизм переопределения не сработает.

Виртуальная функция должна быть членом класса, для которого она переопределяется, а не его другом.

Функции деструкторов можно переопределять через виртуальность, а функции конструкторов – нет.

При вызове виртуальной функции через оператор «точка»(не указатель и не ссылка) переопределение не работает.

26. Понятие абстрактного класса.

Класс, который содержит хотя бы одну чисто виртуальную функцию, называется абстрактным.

( Чисто виртуальная функция – это функция, объявленная в базовом классе, но не имеющая в нем никакого определения).

У абстрактного класса не может быть объектов. Он м. быть только базовым для создания производных классов.

Абстрактный класс можно использовать для объявления указателей и ссылок.

27. Перегрузка операций.

Для перегрузки операции для класса в С++ используется следующий синтаксис:

<Тип> operator <операция>(<входные параметры>) { <операторы>; }

где < Тип > – тип, возвращаемый функцией;

operator – ключевое слово;

< операция > – перегружаемая операция.

В языке С++ имеются следующие ограничения на перегрузку операций:

- С++ не различает префиксную и постфиксную формы ++ и - -;

- переопределяемая операция должна присутствовать в языке (например, нельзя определить операцию с символом #);

- нельзя переопределить операторы, заданные следующими символами: . * :: ? ;

- переопределенные операции сохраняют свой изначальный приоритет.

Перегрузка операций может выполняться функциями-членами класса и функциями, которые не являются членами класса.

При перегрузке бинарной операции функцией-членом класса, объект, стоящий слева от операции, вызывает операторную функцию и передается ей неявно через указатель this. Объект, расположенный справа от операции(оператора) , передается операторной функции как параметр.

При перегрузке унарной операции функцией-членом класса, объект передается через указатель this.

Бинарные операторные функции, которые не являются членами класса, имеют два параметра, а унарные – один.

28. Особенности перегрузки операций при помощи методов класса и функций-друзей.

Перегрузка операций может выполняться при помощи методов класса и функциями-друзьями.

При перегрузке бинарной операции при помощи методов класса, объект, стоящий слева от операции, вызывает операторную функцию и передается ей неявно через указатель this. Объект, расположенный справа от операции(оператора) , передается операторной функции как параметр.

При перегрузке унарной операции при помощи методов класса, объект передается через указатель this.

Бинарные операторные функции, которые являются друзьми класса, имеют два параметра, а унарные – один.