42_類型轉換函數(下)

0.問題:類類型是否能夠類型轉換到普通類型?

1.類型轉換函數

C++類中可以定義類型轉換函數,其作用是將類對象轉換為其它類型。如法規則如下:

operator Type ()
{
  Type ret;
  // ...
  return ret;
}

編程說明:類型轉換函數的初探

#include <iostream>
#include <string>

using namespace std;

class Test
{
    int mValue;
public:
    Test()
    {
    }
    
    Test(int i = 0)
    {
        mValue = i;
    }
    
    int value()
    {
        return mValue;
    }
    
    operator int ()         // 類型轉換函數   
    {
        int ret = mValue;       
        
        return ret;
    }
};


int main()
{
    Test t(1);
    
    int i = t;  // ==> i = t.operator int (); 相當于隱式調用了類型轉換函數
    
    cout << "t.value() = " << t.value() << endl;
    cout << "i = " << i << endl;
    
    return 0;
}

輸出結果:

t.value() = 1
i = 1
  • 類型轉化函數轉換構造函數具有同等的地位,它使得編譯器有能力將對象轉化為其它類型,編譯器能夠隱式的使用類型轉換函數。

2. 類與類之間的相互轉換

編程說明:類類型之間的轉換

#include <iostream>
#include <string>

using namespace std;

class Test;

class Value
{
    int mValue;
public:
    Value()
    {
    }
    
    explicit Value(Test& t)
    {
        
        cout << "explicit Value(Test& t) : " << endl;
    
    }
    
    int value()
    {
        return mValue;
    }
};


class Test
{
    int mValue;
public:
    Test()
    {
    }
    
    Test(int i = 0)
    {
        mValue = i;
    }
    
    int value()
    {
        return mValue;
    }
    
    operator Value ()           // 類型轉換函數   
    {
        Value ret;  
        
        cout << "operator Value ():" << endl;   
        
        return ret;
    }
};


int main()
{
    Test t1(1);
    Test t2(2);
    
    Value v1 = t1;          // 隱式調用時通過Test類中的類型轉換函數
    Value v2 = (Value)t2;   // 顯示調用時通過Value類中的轉換構造函數
                
    return 0;
}

輸出結果

operator Value ():
explicit Value(Test& t) : 

3. 類型轉換函數

  • 無法抑制隱式的類型轉換函數調用
  • 類型轉換函數可能與轉換構造函數沖突
  • 工程中以Type toType()的公有成員代替類型轉換函數,如int toInt();

4.小結

  • C++類中可以定義類型轉換函數
  • 類型轉換函數用于將類對象轉換為其它類型
  • 類型轉換函數轉換構造函數具有同等的地位,編譯器都可以隱式的調用,當同時定義了這兩個函數,編譯器隱式調用時就會報錯(編譯器無法選擇這兩個函數用哪一個)
  • 工程中以Type to Type()的公有成員代替類型轉換函數
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容