1樓:匿名使用者
作為四個內部型別轉換操作符之一的dynamic_cast和傳統的c風格的強制型別轉換有著巨大的差別。除了dynamic_cast以外的轉換,其行為的都是在編譯期就得以確定的,轉換是否成功,並不依賴被轉換的物件。而dynamic_cast則不然。
在這裡,不再討論其他三種轉換和c風格的轉換。
首先,dynamic_cast依賴於rtti資訊,其次,在轉換時,dynamic_cast會檢查轉換的source物件是否真的可以轉換成target型別,這種檢查不是語法上的,而是真實情況的檢查。
先看rtti相關部分,通常,許多編譯器都是通過vtable找到物件的rtti資訊的,這也就意味著,如果基類沒有虛方法,也就無法判斷乙個基類指標變數所指物件的真實型別, 這時候,dynamic_cast只能用來做安全的轉換,例如從派生類指標轉換成基類指標.而這種轉換其實並不需要dynamic_cast參與.
也就是說,dynamic_cast是根據rtti記載的資訊來判斷型別轉換是否合法的.
下面看乙個例子:
struct b1
};struct b2
};struct d1 : b1, b2{};
int main()
上述定義中可以看到,b1和b2是不相關的類,從l1可以看到,dynamic_cast允許這種轉換:只要b1存在多型方法.
l2將編譯失敗,static_cast並不允許兩個完全不相干的類互相轉換.
2樓:匿名使用者
答案為:d
如一樓所說,你的基類的析構函式要使虛擬的,否則後面的派生不會執行,
有哪位高手幫我解決一下兩個c++問題,萬分感謝!
請c++高手幫我解決一下,萬分感謝!
3樓:匿名使用者
看見這個式子考
bai慮三點問題
du:1.符號問題(正負交替zhi)
2.資料範圍dao問題(選用double)3.求乙個數專的n次方(可用pow函式屬:double pow(double x,double y),也可以自定義函式)
幫你解決下第三個問題:
#include
#include
using namespace std;
int main()
/*output:
0.783431(vc++ 6.0)*/
4樓:廖北伯
幫你bai寫du
zhi(3).
double sum=0;
int sign=1;
for(int i=1; i<=10; i++)sum+=term;
}(1)(2)自己
dao編回吧答.
大家幫我看一下,他喜歡我嗎,請大家幫我看一下他是不是喜歡我?
我覺得他並不喜歡,而且一直在敷衍你哦。說不定還有別的內情。好好想想吧,曾經我和你一樣,後悔都來不急。記著,男人不能哄,只有他哄你,那樣他才知道珍惜你。不然他會總覺得你欠他的,永遠都還不清 張馨 我感覺你倆不合適,他太現實而你喜好浪漫。就拿他回家不開機說吧,沒訊號不是問題,如果他真想你,座機也可以打 ...
jsp報錯請大家幫我看一下
輸出使用者資訊 string user name string session.getattribute user name string word request.getparameter word string sayto request.getparameter sayto sayto new...
大家幫我看一下這是哪款電腦,大家幫我看一下這是哪款電腦? 50
這是華碩的asus k51ac膝上型電腦,是一款低端的型號15.6 1366 x 768 螢幕,cpu採用的 athlon x2 ql 65 記憶體 2 gb ram 硬碟 250 gb hdd 假裝是狐狸 根據速龍處理器以及外觀來看,這檯筆記本應該是華碩的老款筆記本,使用這個cpu的華碩電腦有6款...