C 隨筆 轉換函式

2021-09-20 21:07:03 字數 1011 閱讀 4372

當需要將其它型別轉換為使用者自定義類時,如果使用者自定義類中存在只接受乙個引數,且該引數為待轉換型別的建構函式,則可以在某些情況下隱式呼叫建構函式作為轉換函式,從而實現型別的轉換。當建構函式有多個引數時,只有乙個引數沒有預設值,而其他引數都配置了預設值,則同樣可以被自動隱式地作為轉換函式。同時,如果擔心隱式轉換會帶來意想不到的錯誤,可以使用關鍵字explicit宣告建構函式的顯式呼叫有效性,即只允許被顯式地呼叫,不允許被隱式地呼叫。

class classname

//implicit

classname instance;

instance = 10.1;

//explicit

instance = classname(10.1);

//or

instance = (classname)10.1;

使用者定義的強制型別轉換函式。

宣告語句:

operator typename();
注意,轉換函式只能作為類成員函式,該函式是作為類成員函式被呼叫的。且不允許有返回值和傳入引數。其中typename是類物件待轉換成的型別。該函式同樣可以被隱式呼叫,例如將類物件賦予typename型別時,將自動隱式地呼叫轉換函式。

顯式呼叫語法有兩種:

typename(classinstance);

//or

(typename)classinstance;

該轉換函式是用於將相應類物件轉換為其它型別的。

同樣可以使用關鍵字explicit避免隱式轉換,只能進行顯式轉換。

轉換函式雖然在宣告時不返回引數和不傳入引數,但是在函式定義下必須返回轉換後的值。

使用建構函式充當轉換函式只適用於某種型別到類型別的轉換,同時需要類建構函式只唯一接受乙個引數,引數型別為待轉換型別。而若要實現將類型別轉換為其它型別,則需要在定義乙個轉換函式,並將其作為類成員函式。

無論採用哪種方式實現型別轉換,都需要注意避免二義性的出現。

C 隨筆 建構函式

當類中的物件被建立時使用特定的值構造物件,將物件初始化為乙個特定的初始狀態,在物件被建立時自動呼叫 函式名與類名相同 不能定義返回值型別,函式體內也不能有return語句 可以過載 內聯 第一類情形 參數列為空的建構函式 第二類情形 全部引數都有預設值的建構函式 注 以上兩類情形不能同時出現,否則編...

C 轉換函式

在c 中,可以利用建構函式將乙個int型變數轉換為乙個類物件,如cmyclass aclass 5 有人便會問,可以進行相反的轉換嗎?例如將乙個類物件轉換為乙個int值,int ntemp aclass c 可以實現這一需求.但不是建構函式.建構函式只能用於某種型別到類型別的轉換.要進行相反的轉換,...

C 轉換函式

轉換函式分為兩種 1 自己定義的類通過轉換函式轉換為其他型別 2 其他型別通過轉換函式 類建構函式 轉換為自己定義的類 形式 1 operator typename 條件 轉換函式必須為類方法 轉換函式不能指定返回型別 轉換函式不能有引數 例子 define conv fun h include s...