dynamic_cast 强制类型转换,派生类对象指针转为基类对象指针

#include<bits/stdc++.h>
using namespace std;

/**
 * dynamic_cast 强制类型转换,派生类对象指针转为基类对象指针
 * */
class Base {
    public:
        virtual ~Base() {

        }
};
class D :public Base {
    void f() {
        printf("f in D\n");
    }
};
int main() {
    Base *pb, b;
    D *pd, d;

    // 默认转换,编译时完成
    pb = &d;
    pd = &d;

    // 向上转换,运行时完成,将派生类对象指针转为基类对象指针
    pb = dynamic_cast<Base *>(&d);
    pb = dynamic_cast<Base *>(pd);

    // 向下强制转换
    pb = &b;
    pd = dynamic_cast<D *>(pb);
    if(pd) {
        printf("ok\n");
    }
    else {
        printf("error\n");
    }
    // 向下强制类型转换
    pd = dynamic_cast<D *>(&b);
    if(pd) {
        printf("ok\n");
    }
    else {
        printf("error\n");
    }

    pb = &d; // 基类指针必须先指向派生类才可以转换
    pd = dynamic_cast<D *>(pb); // 将基类对象指针转为派生类对象指针
    if(pd) {
        printf("ok\n");
    }
    else {
        printf("error\n");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/consolexinhun/p/15738067.html