如果構造函數只接受一個實參,則它實際上定義了轉換為此類類型的隱式轉換機制。將這種構造函數稱為轉換構造函數。
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
#include<iostream>
usingnamespace std;
classClassTest
{
public:
ClassTest()
{
cout <<"ClassTest()"<<endl;
}
ClassTest(int i)
{
cout <<"ClassTest(int)"<<endl;
value = i;
value2 =2;
}
ClassTest(int i,int j): value(i), value2(j)
{
cout <<"ClassTest(int, int)"<<endl;
}
ClassTest(constClassTest& test)
{
cout <<"ClassTest(const ClassTest&)"<< endl;
value = test.value;
value2 = test.value2;
}
void getValue(int&,int&);
private:
int value =0;
int value2 =0;
};
#endif// MAIN_H_INCLUDED
#include"main.h"
voidClassTest::getValue(int&iValue,int&iValue2)
{
iValue = value;
iValue2 = value2;
}
int main()
{
ClassTest classTest =2;
/**
* 還可以使用以下幾種實現方法
* ClassTest classTest(2);
* ClassTest classTest = ClassTest(2);
* ClassTest classTest = (ClassTest)2;
*/
int value =0;
int value2 =0;
classTest.getValue(value, value2);
cout <<"value = "<< value <<"\nvalue2 = "<< value2 << endl;
return0;
}
- 只允許一步類類型轉換
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
#include<iostream>
usingnamespace std;
classClassTest
{
public:
ClassTest()
{
cout <<"ClassTest()"<<endl;
}
ClassTest(string str)
{
strValue = str;
}
string getValue()
{
return strValue;
}
private:
string strValue;
};
#endif// MAIN_H_INCLUDED
#include"main.h"
int main()
{
ClassTest classTest = string("Hello world!");
//ClassTest classTest = "Hello world!";/*無法實現從char[]先轉化為string,在由string轉換為類類型*/
cout << classTest.getValue()<< endl;
return0;
}
- 抑制構造函數定義的隱式轉換
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
#include<iostream>
usingnamespace std;
classClassTest
{
public:
ClassTest()
{
cout <<"ClassTest()"<< endl;
}
/**
* 如果是在類聲明之外進行類成員函數的實現,explicit只加在聲明的位置
*/
ClassTest(string str)
{
strValue = str;
}
string getValue()
{
return strValue;
}
private:
string strValue;
};
#endif// MAIN_H_INCLUDED
#include"main.h"
int main()
{
//ClassTest classTest = string("Hello world!");/**< 錯誤 */
ClassTest classTest(string("hello world"));/**< 只能用于直接初始化 */
//ClassTest classTest = "Hello world!";/*無法實現從char[]先轉化為string,在由string轉換為類類型*/
cout << classTest.getValue()<< endl;
return0;
}
來自為知筆記(Wiz)