Программирование на языке высокого уровня. Марапулец Ю.В. - 108 стр.

UptoLike

Составители: 

§ 3.6. Переопределение операций
C++ позволяет переопределить действие большинства операций так, чтобы при ис-
пользовании с объектами конкретного класса они выполняли заданные функции. Эта да-
ет возможность использовать собственные типы данных точно так же, как стандартные.
Обозначения собственных операций вводить нельзя. Можно перегружать любые опера-
ции, существующие в C++, за исключением:
. .* ?: :: # ## sizeof
Перегрузка операций осуществляется с помощью методов специального вида
(функций-операций) и подчиняется следующим правилам:
при перегрузке операций сохраняются количество аргументов, приоритеты операций
и правила ассоциации (справа налево или слева направо), используемые в стандарт-
ных типах данных;
для стандартных типов данных переопределять операции нельзя;
функции-операции не могут иметь аргументов по умолчанию;
функции-операции наследуются (за исключением =);
функции-операции не могут определяться как static.
Функцию-операцию можно определить тремя способами: она должна быть либо
методом класса, либо дружественной функцией класса, либо обычной функцией. В двух
последних случаях функция должна принимать хотя бы один аргумент, имеющий тип
класса, указателя или ссылки на класс.
Функция-операция содержит ключевое слово operator, за которым следует знак пе-
реопределяемой операции:
тип operator операция (список параметров) { тело функции }
Для примера, введем операцию + для класса complex
class complex
{
double real, imag;
public:
complex () {real=imag=0;}
complex (double r, double i=0)
{ real=r; imag=i;}
}
Можно легко реализовать функцию
complex Add (complex с1,complex c2)
которая реализует сложение двух комплексных чисел. Но более естественной была бы
запись:
complex c1 (0, 1), с2(1, 0), с3;
с3=с1+с2;
чем c3=Add(c1,c2)
Это может быть реализовано переопределением операции +:
108
      § 3.6. Переопределение операций

      C++ позволяет переопределить действие большинства операций так, чтобы при ис-
пользовании с объектами конкретного класса они выполняли заданные функции. Эта да-
ет возможность использовать собственные типы данных точно так же, как стандартные.
Обозначения собственных операций вводить нельзя. Можно перегружать любые опера-
ции, существующие в C++, за исключением:

.      .*    ?:     ::    #        ##    sizeof

     Перегрузка операций осуществляется с помощью методов специального вида
(функций-операций) и подчиняется следующим правилам:
• при перегрузке операций сохраняются количество аргументов, приоритеты операций
   и правила ассоциации (справа налево или слева направо), используемые в стандарт-
   ных типах данных;
• для стандартных типов данных переопределять операции нельзя;
• функции-операции не могут иметь аргументов по умолчанию;
• функции-операции наследуются (за исключением =);
• функции-операции не могут определяться как static.
     Функцию-операцию можно определить тремя способами: она должна быть либо
методом класса, либо дружественной функцией класса, либо обычной функцией. В двух
последних случаях функция должна принимать хотя бы один аргумент, имеющий тип
класса, указателя или ссылки на класс.
     Функция-операция содержит ключевое слово operator, за которым следует знак пе-
реопределяемой операции:

тип operator операция (список параметров) { тело функции }

Для примера, введем операцию + для класса complex

class complex
{
        double real, imag;
      public:
        complex () {real=imag=0;}
        complex (double r, double i=0)
               { real=r; imag=i;}
}

Можно легко реализовать функцию

complex Add (complex с1,complex c2)

которая реализует сложение двух комплексных чисел. Но более естественной была бы
запись:

complex c1 (0, 1), с2(1, 0), с3;
с3=с1+с2;

чем c3=Add(c1,c2)

Это может быть реализовано переопределением операции +:

                                                  108