Составители:
Рубрика:
рассматривается как бинарная операция с операндами "выражение" и "список выраже-
ний" (возможно пустой). Соответствующая функция есть operator (). Эта функция долж-
на быть нестатическим членом класса. Вызов x(argl, arg2), где х есть объект класса Х ин-
терпретируется как x
.operator() (arg 1, arg2).
Переопределение операции индексации. Операция индексации:
выражение1 [выражение2]
рассматривается как бинарная операция с операндами "выражение1" и "выражение2".
Соответствующая функция есть operator(). Эта функция должна быть нестатическим
членом класса. Выражение х[у], где х есть объект класса Х интерпретируется как
x
.operator[] (у).
Переопределение операций new и delete. Чтобы обеспечить альтернативные вари-
анты управления памятью, можно определять собственные варианты операций new и
new[] для выделения динамической памяти под объект и массив объектов соответствен-
но, а также операции delete и delete [] для ее освобождения.
Эти функции-операции должны соответствовать следующим правилам:
• им не требуется передавать параметр типа класса;
• первым параметром функциям new и new[] должен передаваться размер объекта типа
size_t (это тип, возвращаемый операцией sizeof, он определяется в заголовочном
файле <stddef.h>); при вызове он передается в функций неявным образом;
• они должны определяться с типом возвращаемого значения void*, даже если return
возвращает указатель на другие типы (чаще всего на класс);
• операция delete должна иметь тип возврата void и первый аргумент типа void*;
• операции выделения и освобождения памяти являются статическими элементами
класса.
Поведение переопределенных операций должно соответствовать действиям, вы-
полняемым ими по умолчанию. Для операции new это означает, что она должна возвра-
щать правильное значение, корректно обрабатывать запрос на выделение памяти нуле-
вого размера и порождать исключение при невозможности выполнения запроса. Для
операции delete следует соблюдать условие, что удаление нулевого указателя должно
быть безопасным, поэтому внутри операции необходима проверка указателя на нуль и
отсутствие каких-либо действий в случае равенства.
Стандартные операции выделения и освобождения памяти могут использоваться в
области действия класса наряду с переопределенными (с помощью операции доступа к
области видимости
:: для объектов этого класса и непосредственно - для любых других).
Переопределение операции выделения памяти применяется для экономии памяти,
повышения быстродействия программы или для размещения данных в некоторой кон-
кретной области.
Переопределение операции приведения типа. Можно определить функции-
операции, которые будут осуществлять преобразование объекта класса к другому типу.
Формат:
operator имя_нового_типа ();
Тип возвращаемого значения и параметры указывать не требуется. Можно определять
виртуальные функции преобразования типа.
110
рассматривается как бинарная операция с операндами "выражение" и "список выраже- ний" (возможно пустой). Соответствующая функция есть operator (). Эта функция долж- на быть нестатическим членом класса. Вызов x(argl, arg2), где х есть объект класса Х ин- терпретируется как x.operator() (arg 1, arg2). Переопределение операции индексации. Операция индексации: выражение1 [выражение2] рассматривается как бинарная операция с операндами "выражение1" и "выражение2". Соответствующая функция есть operator(). Эта функция должна быть нестатическим членом класса. Выражение х[у], где х есть объект класса Х интерпретируется как x.operator[] (у). Переопределение операций new и delete. Чтобы обеспечить альтернативные вари- анты управления памятью, можно определять собственные варианты операций new и new[] для выделения динамической памяти под объект и массив объектов соответствен- но, а также операции delete и delete [] для ее освобождения. Эти функции-операции должны соответствовать следующим правилам: • им не требуется передавать параметр типа класса; • первым параметром функциям new и new[] должен передаваться размер объекта типа size_t (это тип, возвращаемый операцией sizeof, он определяется в заголовочном файле); при вызове он передается в функций неявным образом; • они должны определяться с типом возвращаемого значения void*, даже если return возвращает указатель на другие типы (чаще всего на класс); • операция delete должна иметь тип возврата void и первый аргумент типа void*; • операции выделения и освобождения памяти являются статическими элементами класса. Поведение переопределенных операций должно соответствовать действиям, вы- полняемым ими по умолчанию. Для операции new это означает, что она должна возвра- щать правильное значение, корректно обрабатывать запрос на выделение памяти нуле- вого размера и порождать исключение при невозможности выполнения запроса. Для операции delete следует соблюдать условие, что удаление нулевого указателя должно быть безопасным, поэтому внутри операции необходима проверка указателя на нуль и отсутствие каких-либо действий в случае равенства. Стандартные операции выделения и освобождения памяти могут использоваться в области действия класса наряду с переопределенными (с помощью операции доступа к области видимости :: для объектов этого класса и непосредственно - для любых других). Переопределение операции выделения памяти применяется для экономии памяти, повышения быстродействия программы или для размещения данных в некоторой кон- кретной области. Переопределение операции приведения типа. Можно определить функции- операции, которые будут осуществлять преобразование объекта класса к другому типу. Формат: operator имя_нового_типа (); Тип возвращаемого значения и параметры указывать не требуется. Можно определять виртуальные функции преобразования типа. 110
Страницы
- « первая
- ‹ предыдущая
- …
- 108
- 109
- 110
- 111
- 112
- …
- следующая ›
- последняя »