修正 C 中強制型別轉換的應用

2022-08-04 19:18:12 字數 1476 閱讀 4678

c++中強制型別轉換的應用

1.派生類作為實參賦給父類形參

在子類物件作為實參賦給父類型別的形參時,該父類的成員函式由於被子類繼承所以可以通過父類形參呼叫共有方法,而子類的新方法會被自動忽略而父類也就無法呼叫子類的新方法了。

//這之前表述有問題

問題:用父類的形參來訪問子類的新方法。

強制型別轉換(這個可能會有風險,但是編譯器不報錯)

class animal{

public:

void live(){

cout<

public:

void jump(){

cout<

public:

animal * b = new cat;

((dog* )b) -> jump(); //ok, 強制轉化

補充:如果父類指標指向子類物件,需要把父類的指標轉化為指向子類物件的指標,來訪問子類擴充套件成員這就是所謂的向下轉。

但是,向下轉型是危險的,因為父類指標有可能沒有指向子類物件。//這樣試過,編譯器是不報錯的,但是按道理是不好這樣強轉了。

//dog沒有繼承animal

這樣測試下來就是不報錯。

1.派生類作為實參賦給父類形參

在子類物件作為實參賦給父類型別的形參時,該父類的成員函式由於被子類繼承所以可以通過父類形參呼叫共有方法,而子類的新方法會被自動忽略而父類也就無法呼叫子類的新方法了。

//這之前表述有問題

問題:用父類的形參來訪問子類的新方法。

強制型別轉換(這個可能會有風險,但是編譯器不報錯)

class animal{

public:

void live(){

cout<

public:

void jump(){

cout<

public:

animal * b = new cat;

((dog* )b) -> jump(); //ok, 強制轉化

補充:如果父類指標指向子類物件,需要把父類的指標轉化為指向子類物件的指標,來訪問子類擴充套件成員這就是所謂的向下轉。

但是,向下轉型是危險的,因為父類指標有可能沒有指向子類物件。//這樣試過,編譯器是不報錯的,但是按道理是不好這樣強轉了。

//dog沒有繼承animal

這樣測試下來就是不報錯。

C 中型別強制轉換

c 中有4種強制轉換 const cast,static cast,dynamic cast,reinterpret cast,以下將分別介紹 1.const cast 形式const cast expression 用來修改型別的const或volatile屬性,除了const或volatile修...

C 中的強制型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...

C 中的型別強制轉換

c 同時提供了四種新的強制轉型形式 通常稱為新風格的或 c 風格的強制轉型 const cast expression dynamic cast expression reinterpret cast expression static cast expression 每一種適用於特定的目的 dyn...