Читайте также:
|
|
Следующие операторы не допускают перегрузку, (см. табл. 5).
Таблица 5
Список операторов, для которых запрещена перегрузка
Перегрузка операторов подчиняется следующим правилам:
• приоритеты операторов и правила ассоциации, принятые для встроенных типов данных, остаются неизменными при оценке выражений с перегруженными операторными функциями;
• операторная функция не может изменить поведение оператора по отношению к встроенным типам данных;
• операторная функция должна быть либо элементом класса, либо воспринимать один или несколько аргументов, имеющих тип класса;
• операторная функция не может иметь аргументов по умолчанию;
• за исключением оператора operator=() операторные функции наследуются.
Имя операторной функции начинается с ключевого слова operator, за которым следует сам оператор, например operator<<. Операторная функция объявляется и может быть вызвана, как любая другая функция. Использование операторной функции как оператора является просто сокращенной формой ее явного вызова. Например, если для некоторого класса Complex определен оператор +, то следующие формы вызова этого оператора являются эквивалентными:
void f(Complex a, Complex b)
{
Complex c = a + b; //сокращенная форма
Complex d = a.operator+ (b); //полная форма
}
Нужно отметить, что необходимо соблюдать осторожность при переопределении операторов, особенно при переопределении оператора присваивания. Так, например, вы должны предусмотреть присваивание объекта самому себе. В некоторых ситуациях упущение этого момента может запросто привести к зависанию программы. Такая проверка чаще всего осуществляется путем сравнения адресов объектов, стоящих справа и слева от знака равенства.
Дата добавления: 2015-07-26; просмотров: 44 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Операторная функция operator() с несколькими параметрами | | | Пояснительная записка |