C++中static_cast和dynamic_cast強制類型轉換


C++中提供了兩種類型轉換的方法: static_cast和dynamic_cast

簡單從名字看一個是靜態轉換, 另一個是動態轉換

一般轉換分為兩種: 上行轉換和下行轉換

 

上行轉換大致意思是把子類實例向上轉換為父類型, 下行轉換是把父類實例轉換為子類實例

通常子類因為繼承關系會包含父類的所有屬性, 但是有些子類的屬性父類沒有

所以上行轉換的時候,子類實例轉換給父類是安全的, 轉換后的指針或者對象可以放心使用父類的所有方法或者屬性

但是下行轉換的時候可能是不安全的, 因為假如子類有父類沒有的屬性或者方法的話, 父類指針或者實例轉換為子類型后

轉換后的實例中並沒有子類多出來的方法或屬性, 當調用到這些方法或屬性時程序就會崩潰了

 

舉個栗子:

#include <iostream>
using namespace std;


class Base{

    int a;
public:
    void baseMethod(){
        cout << "Base method" << endl;
    };
};

class ChildClass: public Base{
    int b;
public:
    void childMethod(){
        cout << "child method" << endl;
    };
};

int main(){

    /* 上行轉換 */
    ChildClass child;
    Base b = static_cast<Base>(child);
    b.baseMethod();
    
    /* 下行轉換 */
    Base bb;
    ChildClass cc = static_cast<ChildClass>(bb);
    
}

有的編譯器會校驗下行轉換, 會提示錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM