Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Понятие классов и экземпляров классов.




Полиморфизм

Полиморфизм (polymorphism) (от греческого polymorphos) — это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. Например, для языка С, в котором полиморфизм поддерживается недостаточно, нахождение абсолютной величины числа требует трех различных функций: abs(), labs() и fabs(). Эти функции подсчитывают и возвращают абсолютную величину целых, длинных целых и чисел с плавающей точкой соответственно.В C++ каждая из этих функций может быть названа abs(). (Один из способов, который позволяет это делать, показан далее в этой главе.) Тип данных,который используется при вызове функции, определяет, какая конкретная

версия функции действительно выполняется. Как вы увидите, в C++ можно использовать одно имя функции для множества различных действий. Это называется перегрузкой функций (function overloading).

2. Перегрузка функций. Значение формальных параметров по умолчанию в языке С++.

Как правило, разным функциям дают различные имена, но когда функции выполняют концептуально аналогичные задачи для объектов различных типов, может оказаться удобным присвоить им одно и то же имя. Использование одного имени для операции, выполняемой с различными типами, называется перегрузкой. Такая техника уже используется для базовых операций С++. Например, существует только одно имя для сложения +, но его можно использовать для сложения целых, чисел с плавающей точкой и для инкремента указателей. С точки зрения компилятора, единственное, что функции имеют общего между собой – это имена. Предположительно, такие функции в некотором смысле похожи друг на друга, но сам язык не накладывает в связи с этим никаких дополнительных ограничений и никак не помогает программисту. Таким образом, перегруженные функции предназначены в первую очередь для удобства записи. Это имеет особое значения для распространенных имен, таких как sqrt,print и open. Когда вызывается функция f, компилятор должен определить, какую функцию с именем f использовать. Идея состоит в том, чтобы использовать функцию с наиболее подходящими аргументами и выдать сообщение об ошибке, если таковой не найдено. Процесс поиска такой функции заключается в нахождении наилучшего соответствия типов формальных и фактических аргументов: точное соответствие типов, соответствие достигаемое продвижением интегральных типов, соответствие достигаемое при помощи преобразований. Функции объявленные в разных областях видимости не являются перегруженными.

Тип аргумента по умолчанию проверяется в месте объявления функции и вычисляется в момент вызова. Аргументы по умолчанию можно задавать только в конце списка аргументов. Аргумент по умолчанию не может быть повторен или изменен в последующих объявлениях в той же области видимости. Для некоторых функций невозможно указать количество и типы всех аргументов. Список аргументов в объявлениях атких функций заканчивается многоточием.

 

Указатели и ссылки. Указатель this.

Указатели. Для данного типа Т, тип Т* является указателем на Т. То есть переменная Т* содержит адрес объекта типа Т. Основной операцией над указателем является разыменование, то есть получение объекта, на который указывает указатель. Эта операция называется также косвенным обращением. Оператором разыменования является унарный *. Указатели задуманы с целью непосредственного отражения механизмов адресации компьютеров, на которых исполняются программы. Большинство компьютеров может адресовать байт. Те которые не могут, все равно так или иначе умеют извлекать байты из слов. С другой стороны, очень немногие машины могут непосредственно обращаться к битам. Следовательно, наименьшим объектом, который можно разместить и на который можно независимо указать с помощью встроенных типов, является char.

Ссылки. Ссылка является альтернативным именем объекта. Ссылки чаще всего используются для указания аргументов функций и возвращаемых значений вообще, и при перегрузке операторов в частности. Запись Х& означает ссылку на X. Чтобы быть уверенным,что ссылка является именем чего-либо мы должны проинициализировать ее. Инициализация ссылки координально отличается от присваивания ей значения. Несмотря на форму записи,ни один оператор не выполняет действий над ссылкой. Очевидной реализацией ссылки является указатель, при каждом использовании которого происходит разыменование.Ссылки на переменные и ссылки на константы различаются: создание временной переменной в случае ссылки на переменную интенсивно провоцирует ошибки.

 

 

Использование операторов new и delete.

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

 

 

Понятие классов и экземпляров классов.

Класс – это определяемый пользователем тип. Функции объявленные внутри определения класса называются функциями-членами и их можно вызывать только для переменной соответствующего типа, используя стандартный синтаксис доступа к членам структуры. Управление доступом. Метка public разделяет тело класса на две части. Имена в первой (private) части могут использоваться только функциями-членами. Вторая часть образует открытый интерфейс объектов класса. Структура, на самом деле, является классом, члены которого открыты по умолчанию.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...