C 物件型別轉換問題?

時間 2021-12-27 08:13:58

1樓:C十十20年

參見《C++程式設計精要教程》關於基類和派生類的記憶體布局,基類是派生類一部分。若基類沒有說明為虛基類,則基類位於派生類資料成員的前面,在這種情況下通過static_cast等可以完成轉換,但是這導致程式是不安全的,因為當基類物件被作為派生類物件時,顯然其「派生類資料成員」是不存在的,呼叫派生類的例項函式成員難免不訪問「派生類資料成員」,訪問不存在的成員導致程式是不安全的。而如果基類被說明為派生類的虛基類,則強制轉換會帶來災難性的後果:

虛基類到基類的對映機制,可能被你對資料成員賦值所破壞。

2樓:

學習C++,強烈推薦《深入C++物件模型》,絕對好書。

對於這個問題,關鍵點就在於理解靜態型別和動態型別概念,也就是new Base和new Derived的區別,以及把new的結果賦值給Base*或者Derived*型別指標的語意。

3樓:藍色

若基類繫結的不是子類的資訊,它怎麼能轉到子類呢?它就只包含有了基類的資訊,根本不含有任何的子類資訊,那麼子類多的那些資訊,它是根本沒有的。

若基類繫結的是子類A的資訊,怎麼能轉到子類B呢?如花是基類,玫瑰花和康乃馨是子類,現在我們花指的是玫瑰花,你怎麼能轉到康乃馨呢?這根本是不對的嘛。

C語言不同資料型別計算時轉換問題?

薛非 1.m a b 的計算過程中,是將a和b分別轉換為int型,還是將a b的結果轉換為int型?作為右值,所有短於int型別的資料都會被隱式地轉換為int或unsigned 所以m a b 本質上表達的是 m int a int b 這叫整數提公升 integer promotions 2.a ...

c 不同類的物件之間自動型別轉換有什麼用?

Pluto Hades 這設計太有用了好嗎 舉個例子,我定義了幾個類,分別是utf8string,utf16string,utf32string,gb18030string。寫好自動型別轉換的方法,再過載操作符 這樣我就能從一種編碼的字串直接構造另一種,還能直接在不同編碼的字串直接互相賦值,多方便 ...

C 下行轉換(DOWNCAST)問題。下行轉換之後的派生類指標能用派生類獨有的函式或成員嗎?

畫易 class Derive virtual void fun2 void test VS 除錯 轉到反彙編 呼叫p1.fun 時 物件通過ecx傳入,如果函式裡不用物件的話是無所謂的,就算是直接Derive p1 Derive NULL p1 fun 也不會報錯的 呼叫p1.fun2 時 vir...