1. 程式人生 > 其它 >dynamic_cast 強制型別轉換,派生類物件指標轉為基類物件指標

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;
}