第十一章 型別轉換(C )

2021-10-09 10:19:39 字數 2118 閱讀 1982

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...