effectiveC++ 中的一个问题 条款19: 分清成员函数,非成员函数和友元函数“只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。”上面这句话有点搞不懂,请高人举例指教,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是指的重载运算符的情况。比如,定义了一个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类型。而非成员函数有两个参数,两个参数都可以进行类型转换。 具体的我忘了,好象在Dietel的<<C++大学教程>>中说得很清楚. 数据写入文件遇到的问题,请牛人帮忙解答 [免费软件,如何营利???]请不要灌水回贴,为争取做房奴拼命中...... windows编程程序用了计时器程序自动消失为什么? VC2005中CString如何转字符串? 在子对话框中如何获取主对话框变量的值?? 服务器没有设置事务处理"的提示,该怎么解决?可以马上结贴! 在没有安装office的机器上如何使用access文件? 请问如何显示长宽比例不为1的字体。 【十万行级别的ini数据保存,怎么提高保存速度?】 mpeg的文件头 如何使静态拆分的视图保持高度不变? 主板有没有序列号?
比如,定义了一个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类型。而非成员函数有两个参数,两个参数都可以进行类型转换。