C 42 型別轉換函式 (下)

2021-09-13 02:24:57 字數 1624 閱讀 6280

問題:

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

#include using namespace std;

class test

;int main()

輸出:

test.cpp: in function 『int main()』:

test.cpp:14: error: cannot convert 『test』 to 『int』 in assignment

語法規則:

operator type ()

#include using namespace std;

class test

int value()

operator int ()

};int main()

輸出:

t.value() = 100

i = 100

t 這個物件為 test 型別,怎麼可能用於初始化 int 型別的變數呢!現在就報錯嗎?不急,我看看有沒有型別轉換函式!ok,發現 test 類中定義了 operator int () ,可以進行轉換。

類型別之間的相互轉換?!

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

#include using namespace std;

class test;

class value

explicit value(test& t)

};class test

};int main()

輸出:

operator value ()

注意:

當 value 類中 value(test& t) {} 不使用 explicit 修飾,在編譯時將與 test 類中的 operator value () 產生匹配衝突。

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

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

note: value::value(test&)

#include using namespace std;

class test;

class value

explicit value(test& t)

};class test

};int main()

輸出:

operator value ()

工程中不推薦使用型別轉換函式。隱式的型別轉換可能會產生意想不到的問題。

42 型別轉換函式(下)

類型別是否能轉換為普通型別?c 類中可以定義型別轉換函式,型別轉換函式用於將類物件轉換為其它型別。語法規則 operator type 返回type型別 type ret return ret include include using namespace std class test int va...

42 型別轉換函式(下)

1 問題 我們上一課的內容是將普通型別轉換成類型別,那麼問題來了,我們能否將類型別轉換到普通型別?單純這樣肯定是不行的,我們必須引入新的規則 2 型別轉換函式 operator type include using namespace std class test int geti operator...

42 型別轉換函式(下)

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 問題 類型別是否能夠型別轉換到普通型別?二 型別轉換函式 1 c 類中可以定義型別轉換函式 2 型別轉換函式用於將類物件轉換為其它型別 3 語法規則 operator ty...