Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. III Непрерывность дифференцируемой функции
  2. III. Функции Бюро контрольных работ
  3. IV. Основные функции участников
  4. Автокорреляционная функция ЛЧМ-сигнала. Сечения функции неопределенности ЛЧМ-сигнала. Выбор класса зондирующих сигналов для РЛС.
  5. Автоматизация учета финансово-расчетных операций и сводного учета
  6. Автоматизированная обработка учета складских операций и реализации продукции
  7. Автоматизированные системы контроля доступа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<::> new <аргументы> имя_типа <инициализирующее_выражение>;

<::> new <аргументы> имя_типа [ ];

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

void *operator new(size_t t<список _аргументов>);

void *operator new[](size_t t<список _аргументов>);

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

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

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

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


Дата добавления: 2015-12-08; просмотров: 105 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.01 сек.)