Составители:
Рубрика:
§ 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
Страницы
- « первая
- ‹ предыдущая
- …
- 106
- 107
- 108
- 109
- 110
- …
- следующая ›
- последняя »