ВУЗ:
Составители:
Рубрика:
41
Для определения операции используется вводимая пользователем функция с
ключевым словом operator, за которым следует символ операции. Далее будут
приведены общие правила переопределения операций.
1. За исключением операций new и delete, операции должны быть
нестатическими функциями-элементами класса или иметь минимум один аргумент
типа класса. Функции-операции =, () ,[], -> должны быть нестатическими
элементами класса.
2. В ранних версиях языка Си++ постфиксные и префиксные версии операторов
++ и -- не различались при перегрузке. В соответствии со стандартом языка Си++
AT&T 2.1, функция operator@() рассматривается как префиксная форма оператора,
тогда как функция operator@(int) соответствует постфиксной форме, параметр
функции является фиктивным.
3. Операция, которая переопределяется, должна существовать в
языке. Нельзя,
например, определить оператор #.
4. Нельзя переопределять следующие операции: ., :: , ?:.
5. Приоритет операций при переопределении сохраняется.
6. При переопределении любой унарной операции @ выражение @x или x@
интерпретируется как x.operator@() или как operator@(x).
Для любой бинарной операции @ выражение x@y интерпретируется как
x.operator@(y) или как operator@(x,y).
7. Операции new и delete
могут быть переопределены. Операция new должна
возвращать результат типа void * и иметь первый аргумент типа size_t. Операция
delete должна возвращать результат типа void и иметь первый аргумент типа void *,
второй аргумент может быть типа size_t. Операции new и delete всегда являются
статическими элементами класса, даже при отсутствии в их описании ключевого
слова static.
Пример класса
В предлагаемом примере использованы возможности языка Си++,
рассмотренные выше.
Пример:
// Заголовочный файл textpoint.h, описание класса
#ifndef _TEXTPOINT_H_
#define _TEXTPOINT_H_
class TextPoint
{ private:
int color; //Цвет символа
int x,y; //Положение символа на экране
int visible; //Видим ли символ?
41
Для определения операции используется вводимая пользователем функция с
ключевым словом operator, за которым следует символ операции. Далее будут
приведены общие правила переопределения операций.
1. За исключением операций new и delete, операции должны быть
нестатическими функциями-элементами класса или иметь минимум один аргумент
типа класса. Функции-операции =, () ,[], -> должны быть нестатическими
элементами класса.
2. В ранних версиях языка Си++ постфиксные и префиксные версии операторов
++ и -- не различались при перегрузке. В соответствии со стандартом языка Си++
AT&T 2.1, функция operator@() рассматривается как префиксная форма оператора,
тогда как функция operator@(int) соответствует постфиксной форме, параметр
функции является фиктивным.
3. Операция, которая переопределяется, должна существовать в языке. Нельзя,
например, определить оператор #.
4. Нельзя переопределять следующие операции: ., :: , ?:.
5. Приоритет операций при переопределении сохраняется.
6. При переопределении любой унарной операции @ выражение @x или x@
интерпретируется как x.operator@() или как operator@(x).
Для любой бинарной операции @ выражение x@y интерпретируется как
x.operator@(y) или как operator@(x,y).
7. Операции new и delete могут быть переопределены. Операция new должна
возвращать результат типа void * и иметь первый аргумент типа size_t. Операция
delete должна возвращать результат типа void и иметь первый аргумент типа void *,
второй аргумент может быть типа size_t. Операции new и delete всегда являются
статическими элементами класса, даже при отсутствии в их описании ключевого
слова static.
Пример класса
В предлагаемом примере использованы возможности языка Си++,
рассмотренные выше.
Пример:
// Заголовочный файл textpoint.h, описание класса
#ifndef _TEXTPOINT_H_
#define _TEXTPOINT_H_
class TextPoint
{ private:
int color; //Цвет символа
int x,y; //Положение символа на экране
int visible; //Видим ли символ?
Страницы
- « первая
- ‹ предыдущая
- …
- 39
- 40
- 41
- 42
- 43
- …
- следующая ›
- последняя »
