C 轉換建構函式和轉換函式

2021-10-06 21:52:05 字數 1762 閱讀 1105

(1)轉換建構函式的作用

作用:將某種型別轉換為類型別

例如有下面的**:

base

(int a)

;//轉換建構函式

base b;

//物件

b=12

;

解析:

程式將使用建構函式base(int a)構造出乙個臨時的無名base物件,並用12對其初始化。然後採用逐個成員賦值的方式將該臨時物件的內容賦值給物件b。這一過程被稱為隱式型別轉換,因為它是自動的,不需要顯式強制型別轉換。

(2)轉換建構函式基本形式

定義:只接受乙個乙個引數的建構函式才能作為轉換建構函式。

對於這句話有兩層含義:

建構函式在宣告時,就只設定了乙個引數。例如:base(int a);建構函式在宣告時,設定了多個引數,但是其餘引數都是有預設值的。例如:base(int a,double b=12.0);

以上兩種形式都可以。

(3)使用explicit關鍵字

在建構函式前面加上explicit關鍵字,那麼將禁止這種隱式型別轉換,但是還是可以進行顯式轉換。例如:

explicit base

(int a)

;

那麼

base b;

//物件

b=12

;

將出錯。

(1)作用:

它的作用正好和轉換建構函式相反。它是將類型別轉換為某種型別。將類物件賦值給typename變數或者將其強制轉換為typename型別時,將自動呼叫轉換函式。

例如下面**:

假設定義了從base型別轉換為double型別的轉換函式。

一、使用者主動呼叫

base object(12

);//類物件

double a=

double

(object)

;double a=

(double

) object;

//這兩種呼叫形式都可以

二、由編譯器決定如何做:

base object(10

);double a=object;

編譯器發現右側是類型別,而左側是double型別,因此他會檢視程式設計師是否定義了與此匹

配的轉換函式,如果沒有,將編譯出錯。

(2)形式

形式如下:

operator typename()

;

其中typename是要轉換的型別,如果是double就是operator double();

注意事項:

1. 轉換函式必須是類的成員函式

2. 轉換函式無返回值

3. 轉換函式不能有引數

因為typename已經指出要轉換的型別,所以不需要引數。因為它是類的成員函式,所以是通過類物件來呼叫,從而告知要轉換的值,因此不需要引數。

C 轉換建構函式和隱式轉換函式

其實我們已經在c c 中見到過多次標準型別資料間的轉換方式了,這種形式用於在程式中將一種指定的資料轉換成另一指定的型別,也即是強制轉換,比如 int a int 1.23 其作用是將1.23轉換為整形1。然而對於使用者自定義的類型別,編譯 系統並不知道如何進行轉換,所以需要定義專門的函式來告訴編譯系...

C 轉換建構函式和隱式轉換函式

本文的所有內容均來自 今天是第一次聽到c 還有個轉換建構函式,之前經常見到預設建構函式 拷貝建構函式 析構函式,但是從沒聽說過轉換建構函式,隱式轉換函式也是一樣,c 的確是夠博大精深的,再次嘆服!其實我們已經在c c 中見到過多次標準型別資料間的轉換方式了,這種形式用於在程式中將一種指定的資料轉換成...

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

用途 將乙個其它型別的資料轉換成自定義的類型別。注意 這種建構函式只有乙個引數,但要區別於拷貝建構函式 形參是乙個自定義型別的引用 例子 include using namespace std class complex 這個預設的建構函式便可以充當 轉換建構函式 complex double r ...