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;
}
posted @ 2021-12-27 21:56  consolexinhun  阅读(138)  评论(0编辑  收藏  举报