小众知识

首页 > 正文

运算符重载的问题!高手加分!

#include 
using namespace std;

class increase
{
    int value;
public:
    increase (int x)
    {
        value = x;
    }

    void disp()
    {
        cout << value << endl;
    }

    increase &operator ++()
    {
        value ++;
        return * this;
    }
    increase &operator ++(int)
    {
        increase temp(*this);
        value++;
        return *this;
    }
};

void main()
{
    increase n(20);
    n.disp();

    (n++).disp();//21???
    //怎么会是21呢,应该是20吧!请高手解释啊!
    //怎么修改运算符重载函数才能让它显示成20呢?
    n.disp();

    (++n).disp();
    n.disp();
}

请给出源码!谢谢  

 zhuoshenme 发表于:2002-11-12 00:13:51
得分:10 

你的定义错了
prefix++ 前++ 应该是increase& operator++()
postfix++ 后++ 应该是 ( 建议如下)
increase operator++(int)
{
increase temp(*this);
++(*this);
return temp;
}
后++,要返回一个副本,而不是引用,否在就会出现问题。 

 zhaoyong16516819 发表于:2002-11-12 08:52:03
得分:10 

把incream &operator++()
{
value++;
return *this;
}
改为increan&operator++()
{
value+=1;
return *this;
}
应该可以了把
我已经试过了

 hugjchina 发表于:2002-11-12 10:59:48
得分:5 

同意zhuoshenme的做法,肯定是可以的,zhaoyong16516819的做法虽然可以,但有欠缺。后加加必须在定义时的()中加上参数类型 

 maojincxj 发表于:2002-11-12 11:17:50
得分:10 

正确解答:
increase& operator ++()
{
++value;
return *this;
}
const increase operator ++(int)
{
increase temp(*this);
++(*this);
return temp;
}

 maojincxj 发表于:2002-11-12 11:18:00
得分:0 

正确解答:
increase& operator ++()
{
++value;
return *this;
}
const increase operator ++(int)
{
increase temp(*this);
++(*this);
return temp;
}

 ilmself0451 发表于:2002-11-12 23:15:10
得分:0 

hugjchina(初学者)说zhaoyong16516819(黑石头) 的有欠缺,可以详细说说吗?
maojincxj(毛巾) 的程序,后面为什么不用引用了,它是否还可以做左值呢? 

 zhaozhencn 发表于:2002-11-13 16:37:25
得分:10 

我来说几句吧:
//前缀应该如下:
increase& operator ++()
{
++value;
return *this;
}
//后缀应该如下, 其中有一个int 类型的参数,这是C++  中的一个规定。
const increase operator ++(int) //另,返回为一个CONST的对象,这样可以 防止这样的语句调用: I++++
{
++(*this);
return increase(value-1);//这样效率更好
}


 xbin999 发表于:2002-11-13 17:22:45
得分:5 

to  ilmself0451 (红草)  
"maojincxj(毛巾) 的程序,后面为什么不用引用了,它是否还可以做左值呢?"
temp 是一个临时变量,只能返回值,不能返回引用了

 ilmself0451 发表于:2002-11-17 23:10:56
得分:0 

谢谢大家了,我明白了! 

上一篇:关于static的问题,请给予指教!
下一篇:关于控制鼠标的问题请大家帮忙解决 谢谢!

分享到: