条款19: 分清成员函数,非成员函数和友元函数“只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。”
上面这句话有点搞不懂,请高人举例指教,谢谢。

解决方案 »

  1.   

    应该是指的重载运算符的情况。
    比如,定义了一个Complex类,有Complex(int)的构造函数。
    如果要支持Complex和int类型的加法运算,一般会定义Complex+Complex的用法,由于int可以转换为Complex,Complex+int和int+Complex都会得到支持。如果将operator +定义为Complex的成员函数operator +(Complex),那么只有在Complex+int时会调用Complex::operator +,在int+Complex的情况下,由于+左边的类型是int,编译器不会将这个int转换为Complex,也就不会调用Complex::operator +,所以int+Complex是失败的。当operator +定义为非成员函数,operator +(Complex, Complex)时,对于int+Complex的情况,编译器也会将int参数进行类型转换,从而实现加法操作。核心就是,作为成员函数的只有一个参数,左操作符必须是Complex类型。而非成员函数有两个参数,两个参数都可以进行类型转换。
      

  2.   

    具体的我忘了,好象在Dietel的<<C++大学教程>>中说得很清楚.