#include<iostream>
using namespace std;
class Test1
{
public:
Test1(int n)
{
num=n;
cout << num << endl;
}//普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n)
{
num=n;
cout << num << endl;
}//explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1=12;//隐式调用其构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(13);//显式调用成功
return 0;
}
记录1:编译报错:/tmp/136684261/main.cpp:28:11: error: no viable conversion from 'int' to 'Test2'
Test2 t2=12;//编译错误,不能隐式调用其构造函数。
有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象,如:Test1 t1=12;
记录2:
int main()
{
Test1 t1=12.1;//隐式调用其构造函数,成功
//Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(13.1);//显式调用成功
return 0;
}
如果创建对象的时候传入的是浮点数,会被转换为整型,输出:12 13。
网友评论