首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 语言基础 >> 正文
C++中利用构造函数与无名对象简化运算符重载函数(2)
作者:管宁    文章来源:PConline    更新时间:2006-5-24 11:44:57
有问题的代码如下:

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"); 
}

相关文章:
列举系统当前所有进程
在没有ui的程序中捕获所有的key事件
Symbian类里的extension和reserved
Symbian应用程序中如何备份和载入
播放WAV文件
Symbian程序中的观察者模式
S60平台:Bluetooth API开发伙伴指南——搜索和发布
如何在SYMBIAN60中编写DLL
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号