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

1 ... 207 208 209 [ 210 ] 211 212 213 ... 227


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, его использование может привести к неожиданной и нежелательной модификации объектов.



1 ... 207 208 209 [ 210 ] 211 212 213 ... 227

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