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) 收藏 举报
浙公网安备 33010602011771号