1.什么是类型转换函数
类型转换函数的作用是将一个类的对象转换成另一类型的数据。
class testclass
{
private:
int r;
int m; public :
testclass(int n,int f):r(1)
{
m=n+f;
}
~testclass()
{
printf("析构\n");
}
operator int()
{
return m;
}
//operator double()
//{
// return (double)m;
//}
};
比如上述的类
如果调用cout输出testclass对象,则编译器会调用operator int()。
testclass A(1,3);
cout<<A<<endl;
输出结果为4(编译器VS2010,系统环境WIN7 X64)
2.是不是所有调用都会自动调用类型转换函数?
上述第一项,已经证明cout调用可以。
那么来看printf。
代码:printf("%d",A);
输出为1(编译器VS2010,系统环境WIN7 X64)
事实证明printf是不可以的。
所以并不是所有的调用形式都会调用类型转换函数。
int n=A+1;这种运算的调用是可以的。
3.最好不要同时存在两个或两个以上的类型转换函数
容易造成语法上的歧义
我将上述的operator double()的注释打开
cout输出A的值,编译不过。错误提示为不明确的<<
而且
int n=A+1;
double d = A+1.0;
这种形式的调用也不能通过编译
需要强制转换
int n=(int)A+1;
double d = (double)A+1.0;
囧.......