113.dynamic_cast 虚函数 通过子类初始化的父类转化为子类类型

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //子类同名函数覆盖父类
 5 //父类指针存储子类地址,在有虚函数情况会调用子类方法,否则会调用父类方法
 6 
 7 class base
 8 {
 9 public:
10     virtual void show()
11     {
12         cout << "base show" << endl;
13     }
14 };
15 
16 class baseX : public base
17 {
18 public:
19     void show()
20     {
21         cout << "baseX show" << endl;
22     }
23 };
24 
25 void main()
26 {
27     base *p1 = new baseX;
28     p1->show();
29     cout << typeid(p1).name() << endl;
30     //typeid会自动进行类型转换
31     //用子类进行初始化,有虚函数,*p1是baseX类型,没有虚函数则是base类型
32     cout << typeid(*p1).name() << endl;
33 
34     //把父类转化为子类
35     //dynamic_cast主要用于多态的转换,如果没有虚函数,则不能把 通过 
36     //子类初始化的父类 转化为子类
37     //dynamic_cast只能转化指针或者引用,不可以转化对象
38     baseX *px = dynamic_cast<baseX *>(p1);
39     px->show();
40     cin.get();
41 }

 

posted @ 2018-03-20 21:13  喵小喵~  阅读(182)  评论(0编辑  收藏  举报