转换构造函数和类型转换运算符函数的二义性问题
#include
using namespace std;
class Complex
{
int real;
int imag;
public:
Complex(int r,int i):real®,imag(i){}
Complex()
{
real=0;
imag=0;
}
Complex(int r )
{
real=r;
imag=0;
}//转换构造函数
operator int()
{
return real;
}//类型转换函数
friend Complex operator +(Complex a,Complex b);
};
Complex operator+(Complex a,Complex b)
{
Complex flag;
flag.real=a.real+b.real;
flag.imag=a.imag+b.imag;
return flag;
}//重载+运算符
int main()
{
Complex a(1,2),b(3,4);
//Complex c=a+1;出现二义性问题
Complex c=a+Complex(1);//不出现二义性问题
return 0;
}
原因是:上面的那种没指定给系统如何转换,先后顺序没有,后面的那种系统可以知道是把1转为Complex类,所以不会编译错误。