dynamic转换

 1 /* dynamic转换 */
 2 
 3  #include<iostream>
 4 
 5  using namespace std;
 6 
 7 class base
 8 {
 9 public:
10     virtual void print()// 虚函数
11     {
12         cout << "base" << endl;
13     }
14 
15 };
16 
17 class baseX : public base
18 {
19 public:
20     void print()
21     {
22         cout << "baseX" << endl;
23     }
24 };
25 
26  void main()
27  {
28      // 没有虚函数,基类指针为基类指针类型,获取指向的对象为基类类型
29      // 有虚函数,基类指针仍然为基类指针,获取指向的对象就是派生类类型
30     base *p = new baseX;
31     cout << typeid(p).name() << endl;
32      cout << typeid(*p).name() << endl;
33 
34 // dynamic_cast 主要用于父类指针与子类指针的转换
35 // 转换是否成功与指向的对象还有虚函数有关
36 // 转换失败为空指针,避免误操作
37 // 转换成功就是指针的地址,可以保证安全
38 // dynamic_cast转换必须要有虚函数才可以转换
39     baseX *px = dynamic_cast<baseX *>(p);
40     cout << (void*)px << "  " << (void*)p << endl;
41 
42     cin.get();
43  }

 

posted on 2015-06-10 18:17  Dragon-wuxl  阅读(152)  评论(0)    收藏  举报

导航