Автор работы: Пользователь скрыл имя, 30 Мая 2012 в 00:07, лекция
Ранее мы познакомились с механизмом перегрузки функций, когда имеется возможность определять несколько функций, имеющих одно и то же имя при условии, что у них разные сигнатуры (списки аргументов). На основе перегрузки функций в языке С++ реализуется функциональный полиморфизм.
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
Информация о работе Перегрузка операторов в языке С++. Общие понятия