大家看一下这个程序吧!谢谢

来源:百度知道 编辑:UC知道 时间:2024/07/15 22:18:44
#include "iostream.h"
class Increase{
public:
Increase(int x):value(x){}
friend Increase &operator++(Increase &);//前增量
friend Increase operator++(Increase & ,int);//后增量
void display() {cout<<"the value is "<<value<<endl;}
private:
int value;
};
Increase & operator++(Increase &a)
{
a.value++; //前增量
return a; //再返回原对象
}
Increase operator++(Increase &a,int)
{
Increase temp(a);//通过拷贝构造函数保存原有对象
a.value++;//原有增量修改
return temp; //返回原有对象值
}
void main()
{
Increase n(20);
n.display();
(n++).display();
n.display();
++n;
n.display();
++(++n);
n.display();
(n++)++; //第二次增量操作对临时对象进行
n.display();
cin.get();
}
Increase operator++(Increase &a,int)对于这句不明白,它的参数是怎么回事?int在这这里有什么用?谢谢指点!

1.运算过程中,先将对象进行递增修改,而后返回该对象(其实就是对象的引用)的叫前递增(增量)运算。在运算符重载函数中采用返回对象引用的方式编写。

2.运算过程中,先返回原有对象的值,而后进行对象递增运算的叫后递增(增量)运算。在运算符重载函数中采用值返回的方式编写(这也正是前面(a++)++出错误的原因,(a++)返回的不是引用,不能当作左值继续参加扩号外部的++运算),重载函数的内部实现必须创建一个用于临时存储原有对象值的对象,函数返回的时候就是返回该临时对象。

那么在编写运算符重载函数的时候我们该如何区分前递增运算符重载函数与后递增运算符重载函数呢?

方法就是:在后递增运算符重载函数的参数中多加如一个int标识,标记为后递增运算符重载函数。

具体见如下实例(例一为非成员方式,例二为成员方式):

C++ 代码 //例一

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;

class Test
{
public:
Test(int a=0)
{
Test::a = a;
}
friend Test& operator ++ (Test&);
friend Test operator ++ (Test&,int);
public:
int a;
};