| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 488 人关注过本帖
标题:[讨论]关于引用&的一个问题
只看楼主 加入收藏
四处漂泊
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-11-28
收藏
 问题点数:0 回复次数:6 
[讨论]关于引用&的一个问题

#include<iostream.h>
class Increase
{
public:
Increase(int x):value(x) {}
Increase& operator++(); //换成Increase Increase::operator ++()
Increase operator++(int); //后增量
void display()
{
cout<<"the value is:"<<value<<endl;
}
private:
int value;
};
Increase& Increase::operator ++() //换成Increase Increase::operator ++()
{
value++;//先增量
return *this;//再返回原对象
}
Increase Increase::operator ++(int)
{
Increase temp(*this); //临时对象存放原有对象值
value++; //原有对象增量修改
return temp; //返回原有对象值
}
void main()
{
Increase n(20);
n.display();
(n++).display(); //显示临时对象值
n.display(); //显示原有对象
++n;
n.display();
++(++n);
n.display();
(n++)++; //第二次增量操作对临时对象进行
n.display();
}


把Increase& Increase::operator ++() 换成Increase Increase::operator ++() 结果为什么就不一样了呢/?

搜索更多相关主题的帖子: private display include public color 
2006-11-13 23:09
jiangzw625
Rank: 1
等 级:新手上路
帖 子:119
专家分:0
注 册:2006-3-27
收藏
得分:0 
当你把前增量重载函数返回的是值得时候
void main()
{
Increase n(20);
n.display(); //
(n++).display(); //
n.display(); //
++n;
n.display(); //
++(++n); //这里第一次加的时候,被加的是当前对象,而它返回一个值,那么第二次加,被加的对象是返回的值,而不是当前的对象n
n.display();
(n++)++; //
n.display();
}

马马乎乎
2006-11-14 21:40
wys8435c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-10-2
收藏
得分:0 

上面那个什么后增量 Increase operator++(int); 是什么啊? Increase 不是一个类吗?
怎么后面这么奇怪operator++(int); 到底是什么用法? 我c++学的不怎么好 现在想好好钻一把,
还请高手不吝 说一下哈!


c++新手 请大家多指教!
2006-11-14 22:18
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
Increase::operator++(int);是个重载++运算符的函数,所以,就可以这样n++;(n是Increase类型的一个实例)
同理Increase::operator ++() ,借可以++n
慢慢来,以后你会学到的

2006-11-14 22:52
四处漂泊
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-11-28
收藏
得分:0 
[QUOTE]

当你把前增量重载函数返回的是值得时候
void main()
{
Increase n(20);
n.display(); //
(n++).display(); //
n.display(); //
++n;
n.display(); //
++(++n); //这里第一次加的时候,被加的是当前对象,而它返回一个值,那么第二次加,被加的对象是返回的值,而不是当前的对象n
n.display();
(n++)++; //
n.display();
}

[/QUOTE]
我是问把Increase& operator++(); 这个函数里面的&去掉为什么不同??????





2006-11-15 21:01
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
跟你解释一下:
++(++n); 这个式子, 对于 那个 带 & 的函数来讲, 参与运算的是对象本身, 返回的也是该对象本身, 所以你看到的结果是两次++ 的结果。

现在你把那个函数中的 & 去掉, 那么当你(++n) 运算的时候, 参与运算的虽然确实是该对象本身, 但是当你返回该对象时, 返回的却是一个该对象的copy, 也就是说该对象并没有参与那个括号外的 ++ 运算, 参与那个括号外的 ++ 运算的是该对象的一个copy. 所以该对象本身的值只增加了一次.

问题的根本其实就是 传值 和 传对象的区别, 这里的传 有两个方面, 一个方面是有可能在函数入口端发生, 另一种发生的可能性是函数的出口端, 就你的问题就是 函数出口端 发生的 传值 和 传对象 的问题.

总结如下, 如果你在函数入口端使用 引用(&) 或地址(*) 那么将是对象本身参与工作, 反之, 参与工作的是另一个临时变量.
如果你在函数出口端使用 引用(&) 或地址(*) 那么将返回对象本身, 反之, 将返回一个该对象的copy.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-11-15 23:25
四处漂泊
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-11-28
收藏
得分:0 

明白了
谢谢了

2006-11-16 10:43
快速回复:[讨论]关于引用&的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019819 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved