C++
-
型別轉換建構式、
-
通過轉換建構式和型別轉換運算子來做到型別轉換、
-
主要功能是將其它型別的資料轉換成該型別別的物件、
-
class t { public: //explicit//禁止隱式型別轉換 explicit t(int x = 0) :m(x)//型別轉換建構式、可以將一個整型(int)轉換成型別別(t) { if (m < 0)m = 0; if (m > 50)m = 50; } int m;//定義成員變數、 }; int main() { t ta = 10;//隱式型別轉換、將10轉換成t的物件、呼叫型別別轉換建構式、加上explicit顯示錯誤、 t tb(20);//雖然呼叫了型別轉換建構式、但是沒有進行隱式型別轉換、加上explicit未顯示錯誤、 -
只有一個引數、引數不是本類的const參考、是待轉換的資料型別、
-
-
型別轉換運算子(型別轉換函式)
-
顯示型別轉換運算子、
-
類物件轉換為函式指標、
-
能力和型別轉換建構式相反、
-
特殊的成員函式、能將一個型別別物件轉換成其它資料型別、
-
operator type()const——型別轉換運算子、括號內為空
-
const可選、const表示一般不應該改變轉換物件內容、但不是必須有const、
-
type 表示要轉換成的某種型別、只要能夠作為函式回傳的型別都是可以的、(陣列指標、函式指標、參考等均可)
-
型別轉換運算子沒有形參、因為一般都是隱式執行、也沒辦法傳遞、同樣也無法指定回傳型別、可以正常的回傳type指定的值、
-
必須定義為類的成員函式、
-
class t { typedef void (*tt)(int);//定義函式指標型別、帶有一個形參、沒有回傳型別 public: static void mc(int v)//靜態的成員函式、不依賴物件依賴于類、 { int te; te = 5; } operator tt()//新的型別轉換運算子、將本型別別物件轉換成一個函式指標、 { return mc;//必須要回傳一個函式指標、函式地址(函式名)便可作為函式指標的回傳型別、 } public: t(int x = 0) :m(x)// { if (m < 0)m = 0; if (m > 50)m = 50; } operator int() const//型別轉換運算子、 { return m; } int m;//定義成員變數、 }; int main() { t ta= 10; t tb=60;//編譯器用60生成臨時的t物件(呼叫t型別轉換建構式)、又呼叫賦值運算子將臨時物件的內容給了tb //int k = tb + 20;//隱式呼叫 int k = static_cast<int>(tb) + 20;//顯示強制型別轉換符、 int k1 = tb.operator int () + 5;//顯示呼叫、沒有形參、 t mi (12); mi(12);//呼叫型別轉換運算子、轉換成函式指標型別、回傳函式地址、 有函式地址后再去呼叫靜態成員函式、 }
-
-
-
型別轉換的二義性問題、
- 編譯器不明確轉換成哪一種型別、
-
類成員函式指標、
-
指向類成員函式的指標、
-
普通成員函式、
-
宣告普通成員函式指標
- 類名::*函式指標變數 名
-
獲取類成員函式地址
- &類名::成員函式名、——真正的記憶體地址、
-
使用函式指標——類物件名.*函式指標變數名、如果是物件指標則是指標名->函式指標變數名
-
class c { public: void pc(int te) { cout<<"pc普通函式呼叫"<<te<<endl; } virtual void vc(int te) { cout << "vc虛函式呼叫" << te << endl; } static void sc(int te) { cout << "sc靜態函式呼叫" << te << endl; } }; int main() { void (c:: * mt)(int);//定義類成員指標變數、成員函式是屬于類的、不屬于物件、只有類就有成員函式地址、 mt = &c::pc;//要使用成員函式指標就必須系結到一個類物件上才能呼叫、 c ca,* pt; pt = &ca; (ca.*mt)(20);//針對ca物件的成員函式、 (pt->*mt)(20);//呼叫指標物件 }
-
-
虛函式、
-
void (c:: * ml)(int) = &c::vc; (ca.*ml)(10); (pt->*ml)(20);
-
-
靜態成員函式、
-
void (*mc)(int) = &c::sc; mc(40);//直接呼叫
-
-
-
類成員變數指標、
-
普通成員變數、
-
不是真正意義上的指標、指向的并非是地址、指向的是成員變數、于類物件指標之間的偏移量、
-
類中有虛函式的話就會生成虛函式表、虛函式表是屬于類、和物件沒有關系、
-
class c { public: int ma;//普通成員變數、 }; int main() { int c::*mp = &c::ma;//直接定義類成員變數指標 c ct; ct.*mp = 70;//通過類成員變數指標來修改成員變數值、 相當于是mp=70、 }
-
-
靜態成員變數、
-
屬于類、是真正的地址、
-
class c { public: static int msa;//靜態成員變數屬于類、 }; int c::msa = 5;//定義靜態成員變數 int main() { int* sp = &c::msa; *sp = 123; }
-
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/186533.html
標籤:C++
