char c = 『a』;
int i = c;//隱式轉換
void func(int i)
func(c );//隱式轉換
int foo(void)
char c = 『a』;
int i = (int)c;//顯式轉換c風格
int i = int(c );//c++風格
1)靜態型別轉換
語法:目標型別變數 = static_cast《目標型別》(源型別變數);
適用場景:
用於將void*轉為其它型別的指標。
05static_cast.cpp
#include
using namespace std;
intmain
(void
)
2)動態型別轉換(後面講)
語法:目標型別變數 = dynamic_cast《目標型別》(源型別變數);
3)常型別轉換
語法:目標型別變數 = const_cast《目標型別》(源型別變數);
適用場景:
用於去除乙個指標或引用的常屬性
eg:const int a = 0;
const int* pa = &a;
pa = 200//error
----------------------------------
int pa2 = const_cast(&a);
*pa2 = 200;//ok
06const_cast.cpp
#include
using namespace std;
intmain
(void
)
4)重解析型別轉換
語法:目標型別變數 = reinterpret_cast《目標型別》(源型別變數);
適用場景:
–》任意型別指標或引用之間轉換
07reinterpret_cast.cpp
#include
using namespace std;
intmain
(void);
//"\000" == '\0' == 0
char buf=
"0001\00012345678\000123456"
; t* pt = reinterpret_cast>
(buf)
; cout << pt->type << endl;
//0001
cout << pt->id << endl;
//12345678
cout << pt->passwd << endl;
//123456
return0;
}
–》在指標和整型數之間進行轉換
eg:向物理記憶體0x12345678存放資料100;
int* paddr = reinterpret_cast(0x12345678);
*paddr = 100;
到此為止:前面的內容是對c的擴充知識,後面的內容就是c++的程式設計思想物件導向程式設計
小結:c++之父給c程式的建議
1、慎用巨集,可以使用const、enum、inline替換
eg:#define pai 3.14 ==>const double pai 3.14;
#define state_sleep 0
#define state_run 1
#define state_stop 2
==>enum state;
#define max(a, b) ((a) > (b) ? (a) : (b))
==>inline int max(int a, int b)
2、變數隨用隨宣告同時初始化
3、盡量使用new/delete替換malloc/free
4、少用void*、指標計算、聯合體、強制轉換
5、盡量使用string表示字串,少用c風格char*
modern c design 第十一章
本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...
第十一章3
第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...
java第十一章
問題 1 錯誤 2 異常,1 編譯時異常 檢查異常 2 執行時異常 不檢查異常 是否能用 解決,是的就是異常,不是的就是錯誤 問題 1 先驗 2 捕獲 異常捕獲機智 異常的三個種類 1 檢查異常 2 執行時異常 3 錯誤 throw 提示方法呼叫者本方法可能發生異常 throw跟異常物件 throw...