可以把数字或者字符串当做对象赋值给另一个对象,这样在对该赋值表达式进行计算时,首先要对数字或字符串进行类型转换,同时判断该类的构造函数的参数是否类型匹配,假如匹配,则调用该类的构造函数创建一个临时对象,接着将该临时对象赋值给操作符左边的对象,最后调用析构函数删除临时对象。
对象的转换通常分为两种:显式转换和隐式转换,如果不希望对象隐式转换,可以在相应的构造函数前加explicit关键字关闭隐式转换。
1、数字作为转换对象
class MyClass
{
public:
MyClass(int i){a = i;}
MyClass(){}
~MyClass(){}
private:
int a;
};
int main()
{
//隐式转换
//如果带参构造函数声明为explicit MyClass(int i),那么这种转换将失败
MyClass m = 200;
//显式转换
//如果带参构造函数声明为explicit MyClass(int i),那么只能使用这种显式转换
m = MyClass(300);
return 0;
}
class MyClass
{
public:
explicit MyClass(char *p){::strcpy_s(str, p);}
MyClass(){}
~MyClass(){}
private:
char str[20];
};
int main()
{
//由于关闭了隐式转换,所以此方式编译不过
//MyClass m = "Helloworld";
//可以使用显式转换
MyClass m;
m = MyClass("abcdef");
return 0;
}