关于运算符“++”重载的问题

wengchaohui 2008-05-18 06:47:44

各位,先请看一下例子:
#include<iostream.h>
class counter
{
public:
counter() {v=0;}
counter operator ++();
counter operator ++(int);
void print() {cout<<v<<endl;}
private:
unsigned v;

};
counter counter::operator ++()
{
v++;
return *this; //直接将当前对象的v增1,
}
counter counter::operator ++(int)//counter counter::operator ++(int) 这个参数“int”好像没用到呀?
{
counter t; //在“c++”调用该函数时,
t.v=v++;
return t; //问题所在:(一):调用该函数之前,
//c.v已经由0增到8,现在在该函数内新定义一个对象,即默认该对象的t.v是0,那么执行了 //for循环之后 t.v应该也是8呀,(二)c++调用该函数时,c 和t有什么关系呀?
}
void main()
{
counter c;

for(int i=0;i<8;i++)
++c; //调用counter counter::operator ++()
c.print(); //使c.v从0加到8
for(i=0;i<8;i++)
c++; //调用 counter counter::operator ++(int) 这个参数“int”好像没用到呀?
c.print();
}

运行结果如下:
8
16

疑问:
执行了第一个for 循环时 “++c”里的c.v是8
但是执行第二个for 循环时“c++”里的”++“函数内,自己定义了一个对象t,应该c和t没什么关系呀,而函数的返回值是t,所以结果应该是t.v的值呀,应该也是8呀?不知问什么是16,,,,请各位帮忙,谢谢您!
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wengchaohui 2008-05-18
  • 打赏
  • 举报
回复
我突然间都明白了,,谢谢各位呵呵
wengchaohui 2008-05-18
  • 打赏
  • 举报
回复
能不能告诉我当出现 c++或++c时,它是怎么判断运行哪个函数的,又是怎么运行的,,,,?
wengchaohui 2008-05-18
  • 打赏
  • 举报
回复
counter counter::operator ++(int)//counter counter::operator ++(int) 这个参数“int”好像没用到呀?
//解答:此函数的的int参数主要表示后置递增,以示与前置递增的区别!!
{
counter t; //在“c++”调用该函数时,
t.v = v++; //此处实现了赋值,由于main函数中的c对象的c.v = 8;因此此时t.v = 8;
return t; //问题所在:(一):调用该函数之前,
//c.v已经由0增到8,现在在该函数内新定义一个对象,即默认该对象的t.v是0,那么执行了 //for循环之后 t.v应该也是8呀,(二)c++调用该函数时,c 和t有什么关系呀?
}


对于这个函数我总觉得 应该改为
counter counter::operator ++(int)
{

*this->v = v++;
return *this;
}

是指给当前运行++ 函数的对象增一呀,,我实在不明白
counter counter::operator ++(int)//counter counter::operator ++(int) 这个参数“int”好像没用到呀?
//解答:此函数的的int参数主要表示后置递增,以示与前置递增的区别!!
{
counter t; //在“c++”调用该函数时,
t.v = v++; //此处实现了赋值,由于main函数中的c对象的c.v = 8;因此此时t.v = 8;
return t; //问题所在:(一):调用该函数之前,
//c.v已经由0增到8,现在在该函数内新定义一个对象,即默认该对象的t.v是0,那么执行了 //for循环之后 t.v应该也是8呀,(二)c++调用该函数时,c 和t有什么关系呀?
}

t又不是++ 的参数,真搞不懂c是怎么样赋给t的,,,
visame 2008-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wengchaohui 的回复:]
还有一个问题,分别在什么情况下会调用 counter operator ++(); 和 counter operator ++(int);

麻烦各位了

[/Quote]
一个是前缀++,一个是后缀++。
i++调用counter operator ++(int);
++i调用counter operator ++();
wengchaohui 2008-05-18
  • 打赏
  • 举报
回复
”此处实现了赋值,由于main函数中的c对象的c.v = 8;因此此时t.v = 8;“请问他是怎么赋值的,是将c赋给t吗,,我还是不怎么懂,不好意思,,谢谢您
oliver_wei 2008-05-18
  • 打赏
  • 举报
回复
v是成员变量,第一次调用后v=8,第二次调用时,是在第一次调用的基础上.所以是v=16
Jncryang 2008-05-18
  • 打赏
  • 举报
回复


#include <iostream.h>
class counter
{
public:
counter() {v=0;}
counter operator ++();
counter operator ++(int);
void print() {cout <<v <<endl;}
private:
unsigned v;

};
counter counter::operator ++()
{
v++;
return *this; //直接将当前对象的v增1,
}
counter counter::operator ++(int)//counter counter::operator ++(int) 这个参数“int”好像没用到呀?
//解答:此函数的的int参数主要表示后置递增,以示与前置递增的区别!!
{
counter t; //在“c++”调用该函数时,
t.v = v++; //此处实现了赋值,由于main函数中的c对象的c.v = 8;因此此时t.v = 8;
return t; //问题所在:(一):调用该函数之前,
//c.v已经由0增到8,现在在该函数内新定义一个对象,即默认该对象的t.v是0,那么执行了 //for循环之后 t.v应该也是8呀,(二)c++调用该函数时,c 和t有什么关系呀?
}
void main()
{
counter c;

for(int i=0;i <8;i++)
++c; //调用counter counter::operator ++()
c.print(); //使c.v从0加到8
for(i=0;i <8;i++)
c++; //调用 counter counter::operator ++(int) 这个参数“int”好像没用到呀?
c.print();
}

wengchaohui 2008-05-18
  • 打赏
  • 举报
回复
还有一个问题,分别在什么情况下会调用 counter operator ++(); 和 counter operator ++(int);

麻烦各位了

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧