| 有问题的代码如下:
class Test { public: Test(int a) { Test::a = a; } Test operator + (int temp2) { Test result(temp1.a + temp2); return result; } Test operator + ()//第一个参数被隐藏,怎么办????,int形参无法放到this指针的前面,理想中的应该是(int temp1,Test *this) { } public: int a; };
对于这个问题难道没有办法解决吗? 答案是否定的,我们可以利用类构造函数对参与运算的整型对象进行显式的类型转换,从而生成无名对象参与同类型对象的加运算,这样做可以缩减代码量,提高程序的可读性。
代码如下(例一为非成员形式,例二为成员形式):
//例一 //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream> using namespace std; class Test { public: Test(int a)//事实上构造函数起的转换作用本质就是产生无名对象 { Test::a = a; } friend Test operator + (Test&,Test&); public: int a; }; Test operator + (Test &temp1,Test &temp2) { Test result(temp1.a + temp2.a); return result; } int main() { Test a(100); a = a + Test(10);//显式转换,产生无名对象 a = Test(10) + a; cout<<a.a<<endl; a = 50 + 1;//先进行50+1的内置整型的加运算,然后进行a=Test(51)的隐式转换 cout<<a.a<<endl; system("pause"); } |