C++中的向上型別轉換和向下型別轉換
在C++的世界中有這樣兩個概念,向上型別轉換,向下型別轉換,分別描述的是子類向基類和基類向子類的強制型別轉換。
向上強制型別轉換
切割:覆蓋方法和子類資料丟失的現象生成切割(slice)。
class Base class Derived:public Base int main() Base& b2 = d;//使用引用賦值(不產生切割) Base* b3 = &d;//使用指標賦值(不產生切割) |
因此,我們得出結論,在向上強制轉換過程中,使用指標和引用不會造成切割,而使用直接賦值會造成切割。
向下強制型別轉換
使用dynamic_cast進行向下強制型別轉換。使用此關鍵字有一下幾個條件:
1、必須有虛擬函式;
2、必須開啟編譯器的RTTI開關(vc6: progect-> settings -> c/c++ tab ->category[c++ language]-> Enable RTTI);
3.必須有繼承關係。
Base *b = new Derived; |
本例子中,符合以上條件,轉換成功。否則,會丟擲std::bad_cast異常,轉換返回NULL。
因此,我們可以使用dynamic_cast來判斷兩個類是否存在繼承關係。
相關文章
- 向上轉型和向下轉型
- c++ 型別轉換C++型別
- C++ 常型別轉換C++型別
- 多型,向上向下轉型多型
- C++ 表示式中的型別轉換C++型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 型別轉換型別
- 【C++】C++之型別轉換C++型別
- mysql bigint型別和datetime型別的轉換MySql型別
- java中的型別轉換Java型別
- C++ 動態型別轉換C++型別
- C++強制型別轉換C++型別
- C++ 型別轉換(conv.)C++型別
- 資料型別,型別轉換資料型別
- 型別轉換(int 和 String)型別
- 型別轉換(cast)型別AST
- Convert型別轉換型別
- js型別轉換JS型別
- golang的型別轉換Golang型別
- interface{} 型別的轉換型別
- C++整理18_型別轉換_C++型別
- C++ 重解釋型別轉換C++型別
- C C++ 強制型別轉換C++型別
- 聊聊 C++ 中的四種型別轉換符C++型別
- Java中String和byte型別互相轉換Java型別
- C++型別轉換建構函式C++型別函式
- javascript中隱私型別轉換JavaScript型別
- JS中資料型別轉換JS資料型別
- c++隱式型別轉換存在的陷阱C++型別
- 瞭解JavaScript中的型別轉換JavaScript型別
- Java資料型別及型別轉換Java資料型別
- C# 型別轉換C#型別
- 型別轉換運算子型別
- 型別轉換工具類型別
- 型別轉換注意點型別
- 變數型別轉換變數型別
- go interface{}型別轉換Go型別
- 強制型別轉換型別
- JNI常用型別轉換型別