3、轉換構造函數出廠:
我們前面學習過構造函數,構造函數它可以定義不同類型的參數;但是我們今天這里所說的轉換構造函數的定義時這樣的:
有且僅有一個參數
參數是基本類型
參數是其它類型
接著我們對上面的普通數據類型轉換類類型的代碼進行分析:
#include <iostream>
#include <string>
class Test{
public:
Test()
{
}
Test(int i)
{
}
};
int main()
{
Test t;
t =6; //從 C 語言角度,這里將 5 強制類型轉換到 Test 類型,只不過編譯器 在這里做了隱式類型轉換
return 0;
}
分析:
上面的Test(int i )就是一個轉換構造函數,所以我們上面的這句隱式轉換語句:
t =6
這里其實發生了我們剛才說的利用了轉換構造函數,把6轉換成Test(6),而這樣寫就會產生一臨時對象,所以就可以進行賦值了;但是在現在的技術發展中,肯定是不希望出現這種要人去防止這隱式轉換,所以在c++中有了新技術來防止出現隱式轉換:
工程中通過explicit關鍵字杜絕編譯器的轉換嘗試
轉換構造函數被explicit修飾只能進行顯示轉換(也就是強制類型轉換)
代碼實踐一:
#include <iostream>
#include <string>
class Test{
public:
Test()
{
}
explicit Test(int i)
{
}
};
int main()
{
Test t;
t =6;
return 0;
}