Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры / ООП(Тимофеев) / ООП-Тимофеев.doc
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
328.19 Кб
Скачать

Перегрузка оператора ( ) для индексирования

Матричный тип, предоставляющий динамически размещаемые двумерные массивы, может быть разработан с оператором вызова функции для обеспечения выбора элемента. Это хороший пример контейнерного класса, который полезен в научных других расчетах.

Оператор вызова функции () перегружается как нестатическая функция-член. Он может быть перегружен для различных сигнатур. Он часто используется в oпeрациях итератора или в тех операциях, где нужны множественные индексы

Операторы указателей

Оператор указателя структуры -> перегружается как нестатическая функция-член класса. Перегруженный оператор указателя структуры является унарным операто­ром, действующим на свой левый операнд. Аргумент должен быть либо объектом класса, либо ссылкой на этот тип. Оператор может возвращать либо указатель на объект класса, либо объект класса, для которого определен operator->, либо ссыл­ку на класс, для которого определен operator->.

Указатель на член класса

Указатель на член класса отличается от указателя на класс. Указатель на тип члена класса выглядит как Т::*, где Т – имя класса. В С++ есть два оператора, служащих для разыменования указателя на член класса. Вот они: .* ->*

В конструкциях объект. *указатель_на_член и указатель->*указатель_ на_ член сначала производится доступ к объекту, а затем доступ к указанному члену и его разыменование.

Перегрузка new и delete

Большинство классов содержит операции по распределению и освобождению памя­ти. для обеспечения эффективности или надежности требуется более изощ­ренное использование памяти, чем то, которое предоставляется с помощью простого, вызова операторов new и delete.

Оператор new имеет следующий общий вид: :: opt new размещениеopt тип инициализаторopt Здесь opt обозначает необязательные (optional) части. Вот некоторые примеры:

::new char[10]; //настаивает на глобальном new new(buff) Х(а); //вызов с buff используя X: :X(a)

До сих пор для выделения свободной памяти мы использовали глобальный оператор new (). Система неявно предоставляет аргумент sizeof (тип} для этой функции. Вот прототип функции: void* operator new(size_t size) ;

Операторы new и delete могут быть перегружены. Это свойство предоставляет ме­ханизм, позволяющий пользователю манипулировать свободной памятью. В этой схеме память освобождается с помощью функции free () из stdlib.h. Использу­ем перегрузку операторов new и delete, чтобы позволить объекту Х управлять сво­бодной памятью традиционным для С образом.

Наследование.

Наследование (inheritance) – механизм получения нового класса из существующего. Существующий класс может быть дополнен или изменен для создания производного класса. Наследование – это мощный механизм повторного использования кода. С помощью наследования может быть создана иерархия родственных типов, которые совместно используют код и интерфейсы.

Многие полезные типы являются вариантами других, и часто бывает утомительно создавать для каждого из них один и тот же код. Производный класс наследует описание базового класса; затем он может быть изменен добавлением новых членов, изменением существующих функций-членов и изменением прав доступа. В полезности такой концепции можно убедиться на примере того, как таксономическая классификация компактно резюмирует большие объемы знаний. Скажем, располагая сведениями о понятии «млекопитающие» и зная, что и слон, и мышь являются млекопитающими, можно сделать из описания значительно более краткими. Основное базовое понятие содержит информацию о том, что млекопитающие – это теплокровные высшие позвоночные, вскармливающие своих детенышей молоком. Эта информация наследуется понятиями «мышь» и «слон», но подробно она изложена лишь однажды – в базовом понятии. В терминах С++ и слон, и мышь являются производными от базового класса млекопитающих.

С++ поддерживает виртуальные функции-члены (virtual member function). Это функции, объявленные в базом классе и переопределенные в производных классах. Иерархия классов, которая определена открытым наследованием, создает родственный набор пользовательских типов, на все объекты которых может указывать указатель базового класса. Получая доступ к виртуальной функции с помощью этого указателя, С++ выбирает надлежащее определение функции на этапе выполнения. Объект, на который направлен указатель, должен нести в себе информацию о типе, так чтобы его можно было распознать динамически; в этом заключается характерная особенность кода на С++. Каждый объект знает, как на него можно воздействовать. Такая форма полиморфизма называется чистым полиморфизмом (pure polymorphism).

Наследование полезно встраивать в программное обеспечение для того чтобы увеличить возможность повторного использования кода и обеспечит моделирование проблемы в естественных для нее понятиях. Вот ключевые элементы методологии объектно-ориентированного проектирования, связанные с наследованием:

Соседние файлы в папке ООП(Тимофеев)