casts/casts3.cc - dynamic_cast is a predicate - it tests if a pointer is of the appropriate type. | Lecture 3 - slide 6 : 27 Program 5 |
// Illustration of dynamic_cast as a predicate. #include <iostream> #include <string> using namespace std; class A { public: virtual void f(){ cout << "Here is f in A" << endl; } }; class B: public A { public: void f() override{ cout << "Here is f in B" << endl; } }; // dynamic_casts<T>x in C++ is similar to x as T in C# class C: public A { public: void f() override{ cout << "Here is f in C" << endl; } }; int main(){ A* a = new B{}; // a can point to a B-object a->f(); // Here is f in B if (B *b = dynamic_cast<B*>(a)) // if(a is of type B*) ... b->f(); // yes: Here is f in B else cout << "Cannot" << endl; if (C *c = dynamic_cast<C*>(a)) // if(a is of type C*))... c->f(); else cout << "Cannot" << endl; // no: Cannot }