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

UptoLike

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

рассматривается как бинарная операция с операндами "выражение" и "список выраже-
ний" (возможно пустой). Соответствующая функция есть 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