|
Программирование >> Расширенная версия языка c++
636 Самоучитель С++ template <class CoordType> class coord ( Vpv * CoordType x, y; . * public: coord (CoordType i, CoordType) { x = i; у - j; } void showO { cout x , у endl; } coord<int (1, 2), o2I3, 4); ol.show(); o2 . show 0 ; . i- . coord<double> o3 (0.0, 0.23) 0.19, 3.098); o3.show() ; . o4.ShowO ; -: Ч I * return 0; J T >. T J i> k.ivi;? 5. Совместная работа инструкции catch и throw происходит следующим образом. Поместите все инструкции, для которых вы хотите обеспечить контроль исключительных ситуаций, внутри блока try. При возникновении исключительной ситуации она возбуждается с помощью инструкции throw и затем обрабатывается с помощью соответствующей инструкции catch. 6. Нет. 7. Вызов функции dnateО происходит в том случае, если исключительная ситуация возбуждается той инструкцией throw, для которой нет соответствующей инструкции catch. Вызов функции unexpected() происходит в том если исключительная ситуация не указана в списке типов инструкции throw. 8. catch(...) Упражнения 12.1 1. Динамическая идентификация типа необходима ому, что в C++ при компиляции программы не всегда ест ожность выяснить, на объект какого типа указывает указатель базового класса или ссылается ссылка базового класса. 2. Если класс BaseClass перестает быть полиморфным классом, на экране мы увидим следующее: Приложение В. Ответы на вопросы и решения упражнений 637 Тип переменной i - это int Указатель р указывает на объект типа BaseClass Указатель р указывает на объект типа BaseClass Указатель р указывает на объект тина BaseClass 3. Да. 4. if(typeid(*p} == typeid(D2): 5. Истиннхм. Несмотря на то, что здесь используется один и тот же класс-шаблон, тип данных в каждой из версий различен. 12.2 1. Оператор ic cast позволяет проверить правильность выполнения операции приведения полиморфных типов. 2. #include <iostream> #include <typeinfo> using namespace std; class В { . .. virtual void f() {} clasl: public В ( void f() {} . >; class D2: public В { void f(J {} int main в *p; D2 Ob; p = *> if (p) cou Приведение типов прошло успешно ; else cout Приведение типов не произошло ; return 0; 3. int main О . . . { :-. int i; ; . лг.с, . Shape *p; 638 Самоучитель С++ for (i=0; i<10; i++) j - : : p tor(); получение следующего объекта : cout endl; объект изображается на экране только в том счае, если это не объект та NullShape if (!dynamic cast<NullShape *> (р) ) -(; ;, , , . ; ; ; > р->ехашр1е() ; } ; . . * 1 li ---W return 4. Нет. Указатели Вр и Dp указывают на объекты совершенно разных типов, 12.3 г.ч;---. .,-1 .S 1, Новые операторы приведения типов обеспечивают более безопасные и понятные способы выполнения операции приведения типов. 2. ttinclude <iostream> using namespace void double Si) double sv = const cast<double s> (i) ; . v 100.0; . i int { double X - 98.6; cou x <:< endl; f(x); cou x endl; . . u return 0; 3. Поскольку оператор t cast лишает объекты атрибута const, его использование может привести к неожиданной и нежелательной модификации объектов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |