//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; classTest { public: Test(inta) { Test::a=a; } friendTestoperator+(Test&,int); public: inta; }; Testoperator+(Test&temp1,inttemp2) { Testresult(temp1.a+temp2); returnresult; } intmain() { Testa(100); a=a+10;//正确 a=10+a;//错误 cout<<a.a<<endl; system("pause"); } |
//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; classTest { public: Test(inta) { Test::a=a; } friendTestoperator+(Test&,int); friendinlineTestoperator+(Test&,int); public: inta; }; Testoperator+(Test&temp1,inttemp2) { Testresult(temp1.a+temp2); returnresult; } inlineTestoperator+(inttemp1,Test&temp2)//利用内联函数的定义提高效率 { returntemp2+temp1; } intmain() { Testa(100); a=a+10;//正确 a=10+a;//正确 cout<<a.a<<endl; system("pause"); } |
代码中我们使用内联函数的目的是为了缩减开销,但事实上我们仍然觉得是比较麻烦的,例子中的情况都还是非成员函数的情况,如果运算符重载函数是作为类成员函数,那么问题就来了,重载函数的第一个参数始终被隐藏,我们无发让int形参排列在隐藏参数的前面,从而导致a = 10 + a;无法获取正确的运算符重载函数。