要點總結
我們用傳統的強制類型轉換實現:把所需要的指針類型放在一對圓括號之間,然後寫出將被強制轉換的地址值。
Company *company = new Company(“APPLE”, “Iphone”);
TechCompany *tecCompany = company;
注意不能既刪除company,又刪除tecCompany。
因爲強制類型轉換操作不會創建一個副本拷貝,它只是告訴編譯器把有關變量解釋爲另一種類型組合形式,所以他們指向的是同一個地址。現在術語稱之爲“重婚”!
動態對象強制類型轉換
雖然剛剛那個栗子程序看起來很美!
但它仍有一個問題沒有解決:萬一被強制轉換的類型和目標類型結構完全不同,咋整?
編譯器很笨的,它仍然將按照我們的代碼行事!這樣子的程序是相當危險的,隨時可能崩潰以及被崩潰。
因爲在類繼承關係之間跳來轉去(也就是對有關對象進行強制類型轉換)在面向對象的程序裏非常重要,所以C++程序員準備了幾個新的強制類型轉換操作符(高級)!
注:只要你喜歡,你仍可以在C++裏繼續使用C的強制轉換操作符(像剛纔的栗子),但表中的操作符還能進行必要的類型檢查,因而能夠改善程序的可靠性。
動態強制類型轉換的語法與剛剛我們學到的有很大不同,它看起來更像是一個函數調用:
Company *company = new Company(“APPLE”, “Iphone”);
TechCompany *tecCompany = dynamic_cast<TechCompany *>(company);
先在兩個尖括號之間寫出想要的指針類型,然後是將被轉換的值寫在括號中。