Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 29. Статическое и динамическое связывание.

Статическое (раннее) связывание означает, что объект и вызов ф-ции связываются м/у собой на этапе компиляции, т.е. вся необходимая информация для того, чтобы определить, какая именно ф-ция будет вызвана, известна на этапе компиляции программы (вызов обычных функций). В кач-ве примеров раннего связывания можно указать стандартные вызовы ф-ций, вызовы перегруженных ф-ций и операторов. Достоинство – статическое связ-е более быстрое и обычно требует меньше памяти, чем динамическое (позднее) связ-е. Его недостаток – невысокая гибкость.

Динамическое (позднее) связывание означает, что объект связ-ся с вызовом ф-ций во время исполнения программы, а не ранее. Поздн связ-е достигается путём использ-я виртуальных ф-ций и производных классов. Достоинство высокая гибкость, использоваться для поддержки общего интерфейса, позволяя при этом различным объектам создавать свою собственную реализацию этого интерфейса, помогает создавать библиотеки классов, допускающие собственное использование и расширение. Использование позднего связывания оправдано, если оно улучшает структурированность и управляемость программы.

Недостаток - потеря быстродействие программы.

Вопрос 30. Виртуальные деструкторы.

Уничтожающие функции - уничтожают экземпляры классов.

Виртуальные деструкторы необходимы в случаях использования указателей на базовые классы при выделении динамической памяти под объекты производных классов.

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

Необходимость применения виртуальных деструкторов заключается в использовании операторов new и delete в конструкторах и деструкторах базовых и производных классов, если объекты производных и базовых классов, созданных с помощью new и указателя на базовый класс, то при удалении таких объектов произойдет вызов деструктора базового класса.

Помимо ф-ции виртуальными могут быть деструкторы, конструкторы виртуальными быть не могут.

Вопрос 31. Шаблоны классов.

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

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

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

Для того, чтобы использовать шаблонные классы, достаточно один раз описать шаблон класса. Шаблон класса Stack, например, может служить основой для создания многочисленных классов Stack необходимых программе типов (таких, например, как *Stack для данных типа float>>, <*Stack для данных типа int*, <<Stack для данных типа char* и т. д.).

template<class T>

Class name

Идентификатор Т определяет тип данных-элементов, хранящихся в стеке, и может использоваться в заголовке класса Stack и в функциях-элементах.