zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    二级域名配置
    环信框架-消息模块
    屏幕适配问题
    iOS-NSSession
    环信框架使用
    静态UITableView
    __weak存在的问题
    MVVM与MVC
    iOS通知与多线程
    block
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8612703.html
Copyright © 2011-2022 走看看