Программирование >>  Расширенная версия языка c++ 

1 ... 103 104 105 [ 106 ] 107 108 109 ... 227


Проверка усвоения материала в целом

В этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав.

1. Расширьте пример со списком, пример 1 из раздела 4 так, чтобы в нем перегружались операторы + и Используйте оператор + дж внесения элемента в список, а оператор - для выборки элемента из списка.

2. Что отличает виртуальные функции от перегружаемых функций?

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




Глава 11

Шаблоны и обработка

исключительных

ситуаций

В этой главе вы познакомитесь с двумя важнейшими характеристиками C++ верхнего уровня: шаблонами (templates) и обработкой исключитешых ситуаций (exception handling). Ни та, ни другая характеристики не входили в изначальную спецификацию C++, а были добавлены туда несколько лет назад и определены в стандарте Standard C++. Эти характеристики поддерживаются всеми современными компиляторами и позволяют достичь двух наиболее заманчивых целей программирования: создания многократно используемых

и отказоустойчивых программ.

С помощью шаблонов можно создавать родовые функции (generic functions)

и родовые классы (generic classes). В родовой функции или классе тип данных, с которыми функция или класс работают, задается в качестве параметра. Это позволяет одну и ту же функцию или класс использовать с несколькими различными типами данных без необходимости программировать новую версию функции или класса для каждого конкретного типа данных. Таким образом шаблоны дают возможность создавать многократно используемые программы. В данной главе рассказывается как о родовых функциях, так и о родовых классах.

Система обработки исключительных ситуаций встроена в C++ и позволяет

работать с ошибками, которые возникают во время работы программы, заранее предусмотренным и управляемым образом. С помощью системы обработки исключительных ситуаций C++ ваша программа при возникновении ошибки может автоматически вызвать процедуру ее обработки. Принципиальное преимущество обработки исключительных ситуаций состоит в что она автоматически в зависимости от ситуации запускает одну из множества подпрограмм обработки ошибок, которые предварительно вручную встраиваются в основную программу. Должным образом запрограммированная обработка исключительных ситуаций помогает создавать действительно отказоустойчивые программы.

Повторение пройденного

Перед тем как продолжить, необходимо правильно ответить на следующие вопросы и сделать упражнения.



11.1. Родовые функции

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

По существу, при создании родовой функции вы создаете функцию, которая

может автоматически перегружаться сама.

Родовая функция создается с помощью ключевого слова template. Обычное значение этого слова (т. е. шаблон) точно отражает его назначение в C++. Оно предназначено для создания шаблона (или каркаса), который описывает то, что будет делать функция, при этом компилятору остается дополнить каркас необходимыми деталями. Ниже представлена типовая форма определения функции-шаблона:

templata <class * п> возвр знлчваив 1шя функцггя (список параыетроа) { . ..

тело функции

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

1. Что такое виртуальная функция?

2. Что такое чистая виртуальная функция? Если в объявлении класса имеется чистая виртуальная функция, как называется такой класс и какие ограничения налагаются на его использование?

3. Динамический полиморфизм достигается посредством использования функций и указателей класса. (Вставьте пропущенные слова.)

4. Если при наличии иерархии классов в производном классе опущена перегрузка (не чистой) виртуальной функции, что происходит, когда объект этого производного класса вызывает такую функцию?

5. В чем основное преимущество динамического полиморфизма? Каков его

потенциальный недостаток?



1 ... 103 104 105 [ 106 ] 107 108 109 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика