dynamic_cast 強制型別轉換,派生類物件指標轉為基類物件指標
阿新 • • 發佈:2021-12-30
#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; }