1、數據類型轉換(static_cast)
//數據類型轉換
printf("%d\n", static_cast<int>(10.2));
2、指針類型轉換(reinterpret_cast)
//指針類型轉換
int *pint = new int(1);
char *pch = reinterpret_cast<char *>(pint);
3、涉及到const的指針類型轉換(const_cast)
const int num[5] = { 1,2,3,4,5 };
const int *p = num;
int *pint = const_cast<int *>(p);
4、子類轉化為父類(dynamic_cast)
class man { public: int name; //加上virtual關鍵字,可以使得父類用子類初始化后可以調用子類的函數 virtual void run() { cout << "man is running" << endl; } }; class son :public man { public: void run() { cout << "son is running" << endl; } }; void main() { /*man man1; son son1; man *p = &man1; p->run(); p = &son1; p->run();*/ man *pman = new man; son *pson = new son; //子類指針轉換為父類指針,但是還是調用子類的函數 man *pfu = dynamic_cast<man *>(pson); pfu->run(); system("pause"); }
volatile關鍵字 表示該變量易變,每次在訪問該關鍵字修飾的變量時都要讀內存,不對其進行優化。 mutable關鍵字 類的常成員函數在語義上是不允許修改類的成員變量的,但是有時候可能根據代碼的需要並不是這么絕對。那么就可以使用mutable聲明一個類的成員變量,它告訴編譯器類的常成員函數可以修改這個變量。 explicit關鍵字 修飾構造函數,通常用作 構造函數靜止隱式轉換。 四種類型轉換 1. const_cast 去掉類型的const或volatile屬性。 const int a=10; int &b=const_case<int&>(a); 2. static_cast 靜態類型轉換,用於類型間強制轉換。用於: (1)基類和子類轉換,子類指針轉父類是安全的,父類轉子類不安全。 (2)基本數據類型轉換。 (3)空指針轉換成目標類型指針。 (4)轉換為void類型 int n=1; double d=static_cast<double>(n); int *pn=&n; double *d=static_cast<double*>(&n); void *p = static_case<void*>(pn); 3.dynamic_cast 動態類型轉換,運行時類型安全檢查(轉換失敗返回NULL) (1)安全基類和子類轉換,基類轉子類會失敗。 (2)必須有虛函數。 (3)相同基類不同子類間轉換,結果為NULL。 4.reinterpret_cast 重新解釋類型,沒有進行二進制轉換。 一般用在函數指針類型之間轉換。