隱式轉換,是針對不同型別之間的賦值和運算,函式呼叫傳遞引數 這些的轉換都是由編譯器自動完成*通過上述的兩種方式,c語言大部分的型別轉換都可以順利進行,c++繼承了c中的隱式和顯式轉換的方式,由於c++本身物件模型的複雜性,c++增加了4種型別轉換運算子顯式轉換 由程式設計師在變數前面新增型轉換char ch;
int i=ch;
char *pc=(char *)pb void *ps=(void*)pa
在了解c++四種型別轉換之前,一些概念先了解一下一些基本概念
rtti 是執行階段型別識別c++ 有3個支援rtti的元素
test_enum type = test_enum_1;
char a ;
int b = static_cast
(a);
char c = static_cast
(b);
type = static_cast
(b);
char*pa = null;
int *pb = (int*)pa;
//int *pb = static_cast pa); //error
//pa = static_castpb) //error
char *pc = (char*)pb;
//char *pc = static_cast(pb); //error
void *p = static_cast
(pa);
pb = static_cast
(p);
pc = static_cast
(p);
上行轉換:子類指標或引用轉換成基類表示——安全
下行轉換:基類指標或引用轉換成子類表示——危險(沒有動態型別檢查)
class a
;class b:public a
;class c:public a
;class d
;a obja;
b objb;
a*pobja = new a();
b*pobjb = new b();
c*pobjc = new c();
d*pobjd = new d();
obja = static_cast
(objb); //轉換為基類引用
obja = static_cast
(objb);
objb = static_cast(obja); //不能進行轉換
pobja = pobjb; //right 基類指標指向子類物件
//objb = obja; //error 子類指標指向基類物件
pobja = static_cast
(pobjb); //right 基類指標指向子類
pobjb = static_cast
(pobja); //可以強制轉換基類到子類
//pobjc = static_cast(pobjb); //error 繼承於統一類的派生指標之間轉換
//pobjd = static_cast(pobjc); //error 兩個無關聯之間轉換
(1)繼承關係的類指標物件或引用之間轉換
class a
;class b:public a
;class c:public a
;class d
;a obja;
b objb;
a*pobja = new a();
b*pobjb = new b();
c*pobjc = new c();
d*pobjd = new d();
//obja = dynamic_cast(objb); //error 非引用
obja = dynamic_cast
(objb);
//objb = dynamic_cast(obja); //error a 不是多型型別不能轉換 若有虛函式則可以進行轉換
pobja = dynamic_cast
(pobjb);
//pobjb = dynamic_cast(pobja); //error a 繼承關係 不是多型型別不能轉換
//pobjb = dynamic_cast(pobjc); //error c 兄弟關係 不是多型型別不能轉換
//pobjb = dynamic_cast(pobjd); //error d 沒有關係 不是多型型別不能轉換
包含有虛函式之間物件指標的轉換
class a
};class b:public a
;class c:public a
;class d
};pobjb = dynamic_cast
(pobja); // worning 繼承關係 父類具有虛函式 多型
pobjb = dynamic_cast
(pobjd); //worning 沒有關係 d是多型型別可以轉換
//以上結果:pobjb == null 此處會發生乙個執行時錯誤
> const_cast (expression) 中的type_name和expression的型別必須是一樣的
```cpp
high bar
const high *pbar=&bar
....
high *pb=const_cast
型別
用途dynamic_cast
通常在基類和派生類之間轉換時使用
static_cast
一般的轉換,如果你不知道該用哪個,就用這
const_cast
主要針對const和volatile的轉換
reinterpret_cast
用於進行沒有任何關聯之間的轉換,比如乙個字元指標轉換為乙個整形數
c 型別轉換運算子
c 中有4個型別轉換運算子,使裝換過程更規範 dynamic cast type name expression 如果轉型失敗則返回0,即空指標。該運算子的用途是,使得能夠在類層次結構中進行向上轉換 由於 is a關係,這樣的型別轉換時安全的 而不允許其他轉換。二 const cast const ...
C 型別轉換運算子
用於 指向派生類物件的 基類指標轉換成派生類指標。如果轉換失敗,則返回0,即空指標。通過判斷轉換是否成功,來決定是否用派生類裡的函式 基類中可能沒有那個函式 class a class b public a class c public b a a new a a b new b a c new c...
C 型別轉換運算子
目錄 dynamic cast static cast const cast reinterpret cast c語言的型別轉換比較自由,但也帶來了一些問題,這些問題大多由程式設計師自行控制和解決。對於龐大的c 語言機制而言,這種簡單粗暴的型別轉換方式顯然是個巨大的負擔,因此c 引入4種型別轉換運算...