| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
C++中的运算符重载函数基础及其值返回状态
作者:佚名    文章来源:网络    点击数:    更新时间:2006-9-12
 

 下面我们讨论一下作为类成员函数的运算符重载函数的使用,及其函数的值返回与引用返回的差别。

  下面我们先看实例,而后逐步分析。

代码如下(重要部分做了详细的注解):

 C++ 代码 
 
//程序作者:管宁     
//站点:www.cndev-lab.com     
//所有稿件均有版权,如要转载,请务必著名出处和作者    
 
#include <iostream
using namespace std; 
 
class Test 

    public
        Test(int a = 0) 
        { 
            Test::a = a; 
        } 
        Test(Test &temp) 
        //运算符重载函数为值返回的时候会产生临时变量,临时变量与局部变量result的复制会调用拷贝构造函数,临时变量的生命周期是在拷贝构造函数运行完成后才结束,但如果运算符重载函数返回的是引用,那么不会产生临时变量,而局部变量result的生命周期在运算符重载函数退出后立即消失,它的生命周期要比临时变量短,所以当外部对象获取返回值的内存地址所存储的值的时候,获得是一个已经失去效果的内存地址中的值,在这里的值返回与引用返回的对比,证明了临时变量的生命周期比局部变量的生命周期稍长。 
        { 
            cout<<"载入拷贝构造函数"<<"|"<<temp.a<<endl;//注意这里,如果修改运算符重载函数为返回引用,这里就会出现异常,temp.a将获得一个随机值。 
            Test::a = temp.a; 
        } 
        ~Test()//在mian()内析构的过程是result局部变量产生的 
        { 
            cout<<"载入析构函数!"<<endl; 
            cin.get(); 
        } 
        Test operator +(Test& temp2)//+运算符重载函数 
        { 
            //cout<<this->a<<endl; 
            Test result(this->a+temp2.a); 
            return result; 
        } 
        Test& operator ++()//++运算符重载函数 
 
        //递增运算符是单目运算符,使用返回引用的运算符重载函数道理就在于它需要改变自身。 
        //在前面我们学习引用的单元中我们知道,返回引用的函数是可以作为左值参与运算的,这一点也符合单目运算符的特点。 
        //如果把++运算符重载函数改成值返回的话,程序中的++(++c)运算结束后输出c.a,会发现对象c只做了一次递增运算,原因在于,当函数是值返回状态的时候括号内的++c返回的不是c本身而是临时变量,用临时变量参与括号外的++运算,当然c的值也就只改变了一次。 
        { 
            this->a++; 
            return *this
        } 
    public
        int a; 
}; 
 
int main() 

    Test a(100); 
    Test c=a+a; 
    cout<<c.a<<endl; 
    c++; 
    cout<<c.a<<endl; 
    ++c; 
    cout<<c.a<<endl; 
    ++(++c); 
    cout<<c.a<<endl; 
    system("pause"); 
}

 

上一页  [1] [2] [3] [4] 下一页


相关文章