1. 程式人生 > >C++筆記 第四十二課 型別轉換函式(下)類型別---其他型別---狄泰學院

C++筆記 第四十二課 型別轉換函式(下)類型別---其他型別---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux

第四十二課 型別轉換函式(下)類型別—>其他型別

1.問題

類型別是否能夠型別轉換到普通型別?用編譯器測試—可以,引入新的語法規則

2.型別轉換函式

C++類中可以定義型別轉換函式
型別轉換函式用於將類物件轉換為其他型別
語法規則:
在這裡插入圖片描述

42-1 型別轉換函式初探

#include <iostream>
#include <string>
using namespace std;
class Test
{
    int mValue;
public:
    Test(int i = 0)
    {
	mValue = i;
    }
    int value()
    {
	return mValue;
    }
    operator int()
    {
	return mValue;
    }
};
int main()
{   
Test t(100);
int i = t;
//int i = t.operator int(); //程式碼中是隱式型別轉換
    cout << "t.value() = " << t.value() << endl;
    cout << "i = " << i << endl;
    return 0;
}
執行結果
t.value() = 100
i = 100

型別轉換函式
與轉換建構函式具有同等的地位
使得編譯器有能力將物件轉化為其他型別
編譯器能夠隱式的使用型別轉換函式
編譯器會盡力嘗試讓原始碼通過編譯
在這裡插入圖片描述
類型別之間的相互轉換?!完全可以
型別轉換函式VS轉換建構函式
operator Value(){} VS Value(Test& t){}
當加上explicit Value(Test& t){},錯誤改正

42-2 類型別之間的轉換

#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
public:
    Value()
    {
    }
    explicit Value(Test& t) //轉換建構函式
    {
    }
};
class Test
{
    int mValue;
public:
    Test(int i = 0)
    {
        mValue = i;
    }
    int value()
    {
        return mValue;
    }
    operator Value()//型別轉換函式 Value toValue() 工程中的解決方案
    {
        Value ret;
        cout << "operator Value()" << endl;
        return ret;
    }
};
int main()
{   
    Test t(100);
    Value v = t;
    
    return 0;
}

無法抑制隱式的型別轉換函式呼叫
型別轉換函式可能與轉換建構函式衝突
工程中Type toType()的公有成員代替型別轉換函式

#include <QDebug>
#include <QString>
int main()
{
    QString str = "";
    int i = 0;
    double d = 0;
    short s = 0;
    str = "-255";
    i = str.toInt();
    d = str.toDouble();
    s = str.toShort();
    qDebug() << "i = " << i << endl;
    qDebug() << "d = " << d << endl;
    qDebug() << "s = " << s << endl;
    return 0;
}

小結
C++類中可以定義型別轉換函式
型別轉換函式用於將類物件轉換為其他型別
型別轉換函式與轉換建構函式具有同等的地位
工程中以Type toType()的公有成員代替型別轉換函式