|
Z=X+Y + " Нет войне!";// эквивалентно Z =operator + (X,Y);
// Z = operator + (Z, " Нет войне!");
Z.vivod(); }
В предпоследней строке происходит автоматическое преобразование типа строки “ Нет войне” к типу stroka, то есть создается безвмянный временный объект.
Если бы мы использовали функцию-операцию, представленную как компонентную и строка “ Нет войне” стояла бы на первом месте, то компилятор рассматривая ее как объект, для которого вызывается функция операция, вывел бы сообщение об ошибке (illegal structure operation).
Таким образом, дружественные функции – операции позволяют правильно произвести преобразование типа.
Рассмотрим еще несколько важных особенностей механизма перегрузок (расширения действия) стандартных операций С++:
1) C++ запрещает вводитьоперации с новым обозначением.
2) Нельзя изменить приоритет стандартной операции, перегрузив ее.
3) Нельзя изменять арность операции.
4) Перегрузка бинарной операции определяется либо как компонентная функция класса с одним параметром, либо как внешняя функция, возможно дружественная, с двумя параметрами:
выражение: X <операция>Y
соответствует вызовам:
X. operator <операция> (Y) // если операция-функция -метод класса
или:
operator <операция> (X, Y) // если операция-функция -внешняя
5) Перегрузка унарной операции определяется либо как компонентная функция без параметра, либо как внешняя функция, возможно дружественная, с одним параметром:
выражение: <операция> X
соответствует вызовам:
X. operator <операция> () // если операция-функция -метод класса
или:
operator <операция> (X) // если операция-функция –внешняя
Рассмотрим перегрузку унарной операции “–“ для класса “вектор”:
Дата добавления: 2015-07-19; просмотров: 41 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Перегрузка стандартных операций | | | V.vivod |