С++ для начинающих



         

Класс type_info - часть 3


(c) B *pb = new B;

    D *pd = dynamic_cast< D* > ( pb );

(d) A *pa = new D;

    X *px = dynamic_cast< X* > ( pa );

Упражнение 19.2

Объясните, когда нужно пользоваться оператором dynamic_cast вместо виртуальной функции?

Упражнение 19.3

Пользуясь иерархией классов из упражнения 19.1, перепишите следующий фрагмент так, чтобы в нем использовался ссылочный вариант dynamic_cast для преобразования *pa в тип D&:

if ( D *pd = dynamic_cast< D* >( pa ) ) {

   // использовать члены D

}

else {

   // использовать члены A

}

Упражнение 19.4

Дана иерархия классов, в которой у каждого класса есть конструктор по умолчанию и виртуальный деструктор:

class X { ... };

class A { ... };

class B : public A { ... };

class C : public B { ... };

class D : public X, public C { ... };

Какое имя типа будет напечатано в каждом из следующих случаев:

(a) A *pa = new D;

    cout << typeid( pa ).name() << endl;

(b) X *px = new D;

    cout << typeid( *px ).name() << endl;

(c) C obj;

    A& ra = cobj;

    cout << typeid( &ra ).name() << endl;

(d) X *px = new D;

    A& ra = *px;

    cout << typeid( ra ).name() << endl;




Содержание  Назад  Вперед