//例二 //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream> using namespace std; class Test { public: Test(int a)//事实上构造函数起的转换作用本质就是产生无名对象 { Test::a = a; } Test operator + (Test &temp)//第一个参数即使隐藏也没有关系,因为是以Test类型的无名对象参与运算的 { Test result(this->a + temp.a); return result; } public: int a; }; 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"); }
认真观察了上面的两个例子后我们可以发现,类的构造函数起了显式或者隐式转换的作用,转换过程实质是产生一个类的无名对象,类的运算符重载函数的参数就是这个无名对象的引用,所以参数的顺序也不再是问题,代码的运行效率也得到提高,无需再定义只是参数顺序不同,内容重复的运算符重载函数了。 |