/*********************************************************************
Filename: dyncast.cpp
Compiler: Borland C++ Version 5.1 Summer 1997
Ira Pohl Copyright May 1997
Normally a safe cast that is portable
A supplemental example showing the use of dynamic_cast
See p 347 section 10.9 of Object-Oriented Programming Using C++, 2nd Edition
See p 95 section 12.5 of C++ Distilled
See p 341 section 9.9 of C++ for Fortran Programmers
***************************************************************/
#include < iostream.h>
class A {
public:
virtual void print()const {cout << " A\n";}
};
class B {
public:
virtual void print()const {cout << " B\n";}
};
class C: public A, public B {
public:
void print()const {cout << " C\n";}
};
int main()
{
A* a = new A;
B* b = new B;
C* c = new C;
a -> print(); b -> print(); c -> print();
b = dynamic_cast< B*>(a); //fails
if (b)
b -> print();
else
cout << "no B\n";
a = c;
a -> print(); //C prints
b = dynamic_cast< B*>(a); //succeeds
if (b)
b -> print();
else
cout << "no B\n";
}