Перегрузка операторов в языке С++. Общие понятия

Автор работы: Пользователь скрыл имя, 30 Мая 2012 в 00:07, лекция

Краткое описание

Ранее мы познакомились с механизмом перегрузки функций, когда имеется возможность определять несколько функций, имеющих одно и то же имя при условии, что у них разные сигнатуры (списки аргументов). На основе перегрузки функций в языке С++ реализуется функциональный полиморфизм.

Вложенные файлы: 1 файл

Лекция 28. Перегрузка операторов в языке С++. Общие понятия.doc

— 122.00 Кб (Скачать файл)

11) Оператор [ ] рассматривается как бинарный. Пусть a – объект класса A, в котором перегружен оператор [ ]. Тогда выражение a[i] интерпретируется как a.operator [](i).

12) Оператор ( ) вызова функции рассматривается как бинарный. Пусть a – объект класса A, в котором перегружен оператор ( ). Тогда выражение a(x1, x2, x3, x4) интерпретируется как a.operator ()(x1, x2, x3, x4).

13) Оператор –> доступа к компоненту класса через указатель на объект этого класса рассматривается как унарный. Пусть a – объект класса A, в котором перегружен оператор –>. Тогда выражение a–>m интерпретируется как (a.operator–>())–>m. Это означает, что функция operator –>() должна возвращать указатель на класс A, или объект класса A, или ссылку на класс A.

14) Перегрузка операторов ++ и --, записываемых после операнда (z++, z--), отличается добавлением в функцию operator фиктивного параметра int, который используется только как признак отличия операций z++ и z-- от операций ++z и --z.

15) Глобальные операторы new можно перегрузить, и в общем случае они могут не иметь аргументов (операндов) типа "класс". В результате разрешается иметь несколько глобальных операторов new, которые различаются путем изменения числа и (или) типов аргументов.

16) Глобальные операторы delete не могут быть перегружены. Их можно перегрузить только по отношению к классу.

17) Заданные в самом языке глобальные операторы new и delete можно изменить, т.е. заменить версию, заданную в языке по умолчанию, на свою версию.

18) Локальные функции operator new() и operator delete() являются статическими компонентами класса, в котором они определены, независимо от того, использовался или нет спецификатор static (это, в частности, означает, что они не могут быть виртуальными).

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

20) Если для класса X операция = не была перегружена явно и x и y - это объекты класса X, то выражение x = y задает по умолчанию побайтовое копирование данных объекта y в данные объекта x.

21) Функция operator вида operator type() без возвращаемого значения, определенная в классе A, задает преобразование типа A к типу type.

22) За исключением оператора присваивания = все операторы, перегруженные в классе X, наследуются в любом производном классе Y.

23) Пусть X – базовый класс, Y – производный класс. Тогда локально перегруженный оператор для класса X может быть далее повторно перегружен в классе Y.

 

6

 



Информация о работе Перегрузка операторов в языке С++. Общие понятия