C 中的型別轉換函式

2022-08-18 10:24:07 字數 2129 閱讀 2962

1,轉換建構函式可以將普通的基礎型別轉換為當前的類型別,也有能力將其它類類 型的物件轉換為當前的類型別;

2,問題:

1,類型別是否能夠型別轉換到普通型別?

1,可以的;

3,型別轉換函式:

1,c++ 類中可以定義型別轉換函式;

2,型別轉換函式用於將類物件轉換為其他型別;

1,不管什麼型別都可以;

3,語法規則:

1,**示例:

1

operator type () //

operator 表示定義型別轉換函式,type 表示返回值,沒有引數;

2

4,型別轉換函式初探程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

class

test714

intvalue()

1518

operator

int () //

型別轉換函式;

1922

};23

24int

main()

25

4,型別轉換函式:

1,與轉換建構函式具有同等的地位;

2,使得編譯器有能力將物件轉化為其它型別;

3,編譯器能夠隱式的使用型別轉換函式;

4,編譯器會盡力嘗試讓原始碼通過編譯:

1,這裡實質是隱式型別轉換;

5,類型別之間的相互轉換:

1,型別轉換函式 vs 轉換建構函式

2,類型別之間的轉換程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

class

test;78

class

value914

explicit value(test&t)

1517

};18

19class

test

2027

intvalue()

2831

operator

value()

3237

/*38

工程上通過以下方式;

39value tovalue()

4045

*/46

};47

48int

main()

49

2,編譯輸出:

1,當 value 類建構函式不加 explicit 修飾時:

error: conversion from 『test』 to 『value』 is ambiguous

note: candidates are: test::operator value()

note:                 value::value(test&)

2,當 value 類建構函式加 explicit 修飾時:

1,編譯通過;

3,轉換建構函式和型別轉換函式是互逆的,但是當遇到類型別之間的轉換時,它們之間是有衝突的,編譯器不知道如何選擇,應該在轉換建構函式之前加 explicit 修飾;

3,無法抑制隱式的型別轉換函式呼叫;

4,型別轉換函式可能與轉換建構函式衝突;

1,可通過 explicit 修飾轉換建構函式解決;

5,工程中以 type totype() 的公有成員代替型別轉換函式;

1,工程中一般不定義型別轉換函式;

2,抑制型別轉換函式呼叫;

3,qt 中的示例:

1 #include 2 #include 3

4int

main()

5

5,小結:

1,c++ 類中可以定義型別轉換函式;

2,型別轉換函式用於將類物件轉換為其它型別;

3,型別轉換函式與轉換建構函式具有同等的地位;

4,工程中以 type totype() 的公有成員代替型別轉換函式;

C 中的型別轉換函式

1.四種 static cast,dynamic cast,const cast,reinterpret cast 2.他們的使用 1 static cast 任何隱式轉換都可以由它完成,僅當型別之間可隱式轉換時 除類層次間的下行轉換 static cast的轉換才是合法的,否則將出錯。class ...

C 的型別轉換函式

c 的型別轉換函式 reinterpret cast const cast static cast 和dynamic cast 前三個型別轉換是在 編譯時實現轉換 dynamic cast 是在執行時進行型別轉換的。reinterpret cast expression const cast new...

C 的型別轉換函式

c 的型別轉換函式 reinterpret cast const cast static cast 和dynamic cast 前三個型別轉換是在 編譯時實現轉換 dynamic cast 是在執行時進行型別轉換的。reinterpret cast expression const cast new...