Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа.

Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа.

1. Суть перегрузки операций — одна операция используется с различными типами данных. В C++, например, при помощи операции + можно сложить комплексные числа, матрицы или символьные строки.

Пример: (4 - j4) + (5 + j10); (15 20' SY45"SY) + (53 57' 40"); "combine" + "strings"

В C++ можно перегружать множество операций. Например:+,-,/,*,=,,== и мн. др.

Главное ограничение состоит в том, что синтаксис и приоритет операции не должны изменяться по сравнению с первоначально определенными. Другой важный момент — перегрузка операции возможна только в области действия того класса, в котором она выполняется.

Для перегрузки операции используется ключевое слово operator, за которым следует сама операция:

тип operator операция (список параметров)

Например: angle_value operator +(angle_argument);

Здесь Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа. angle_value — название типа класса, за ним следуют ключевое слово operator, символ самой операции (+) и параметр, передаваемый перегруженной операции.

Операторы new и delete можно перегрузить. Для этого есть несколько причин:

· Можно увеличить производительность за счёт кеширования: при удалении объекта не освобождать память, а сохранять указатели на свободные блоки, используя их для вновь конструируемых объектов.

· Можно выделять память сразу под несколько объектов.

· Можно реализовать собственный "сборщик мусора" (garbage collector).

· Можно вести лог выделения/освобождения памяти.

В С++ имеются две возможности перегрузки операторов new и delete - локально (в пределах класса) и глобально (в пределах программы). Эти операторы имеют правила переопределения, отличные от рассмотренных выше Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа. правил переопределения других операторов. Одна из причин перегрузки операторов new и delete состоит в том, чтобы придать им новые свойства, например, выдачи диагностики или более высокой защищенности от ошибок. Кроме того, может быть реализована более эффективная схема распределения памяти по сравнению со схемой, обеспечиваемой системой.

Оператор new можно задать в следующих формах:

new имя_типа ;

new имя_типа [ ];

Параметр ”аргументы” можно использовать либо для того, чтобы различить разные версии глобальных операторов new, либо для использования их в теле функции operator. Доопределенную функцию operator new можно объявить:

void *operator new(size_t t);

void *operator new[](size_t Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа. t);

Вторая форма используется для выделения памяти для массивов. Возвращаемое значение всегда должно иметь тип void *. Единственный обязательный аргумент функции operator всегда должен иметь тип size_t. При этом в функцию operator автоматически подставляется аргумент sizeof(t).

В стандарте C++ предусмотрено несколько шаблонных функций для преобразования типов.const_cast - предназначен для снятия модификаторов const и volatile.

dynamic_cast - преобразовывает указатель на базовый тип к указателю на тип наследник, если объект действительно наследник, или вернет NULL в противном случае. При преобразовании используется RTTI (run-time type identification).

static_cast - шаблонная функция, для статического (т.е. на этапе компиляции) преобразования типов Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа..


documentapuzfcj.html
documentapuzmmr.html
documentapuztwz.html
documentapvabhh.html
documentapvairp.html
Документ Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа.