请教高手!~~~·

gaoshanliushuimeng 2008-04-12 05:51:53
#include <iostream>
using namespace std;
class B
{ int value;
public:
B()
{static int i=0;
value=++i;
}
B& operator ++()
{value++;
return *this;
}
const B operator ++(int)
{B temp =*this;
++(*this);
return temp;
}
friend void main();
B f()
{B temp=*this;
return temp;
}
};
void main()
{
B a1,b2,c3,d4;
b2=++a1;
a1.operator ++()=c3;
c3=a1++;
d4.f()=b2;
cout<<a1.value<<endl<<b2.value<<endl<<c3.value<<endl<<d4.value <<endl;
}



书上说之所以定义B& operator ++()是引用类型 的 返回值是因为前置的操作符++的计算结果为左值,但我认为加不加&都一样的啊!并且,像上面那样a1.operator ++()=c3;调用成员函数没有让a1.value的值改变啊,与数据操作中++前置不一样啊,数据操作中可以对其进行赋值的,如int p=1;++p=10;p的值就成了10.哪位大侠解释下为什么要加&啊?小弟好好迷茫!!!!!!!

还有,不明白成员函数的调用怎么就成了左值了呢?普通函数的调用不可以在=左边的啊,更别说赋值了!
请教高手~~~~~~····谢谢了
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cpp权哥 2008-04-13
  • 打赏
  • 举报
回复
本来不想说什么,看完了还是忍不住说一句:楼主很不厚道。
gaoshanliushuimeng 2008-04-13
  • 打赏
  • 举报
回复
怎样请版主结贴,把分归还给我啊?这个问题好像是本人解决了~!
gaoshanliushuimeng 2008-04-12
  • 打赏
  • 举报
回复
我晕~~····看错运行结果了,原来可以进行赋值,我还以为不能~~··小弟明白了,多谢~·
zeloas 2008-04-12
  • 打赏
  • 举报
回复
#include  <iostream> 
using namespace std;
class B
{
int value;
public:
B()
{
static int i=0;
value=++i;
}
B& operator ++()
{
value++;
return *this;
}
const B operator ++(int)
{
B temp =*this;
++(*this);
return temp;
}
friend void main();
B f()
{
B temp=*this;
return temp;
}
};
void main()
{
B a1,b2,c3,d4; //a1=1 b2=2 c3=3 d4=4
b2=++a1; //a1=2 b2=2
a1.operator ++()=c3; //c3=3 a1=3
c3=a1++; //c3 =3 a1=4
d4.f()=b2;
//a1=4 b2=2 c3=3 d4 =4
cout <<a1.value <<endl <<b2.value <<endl <<c3.value <<endl <<d4.value <<endl;
}


加了&后返回的是对象的别名,也就相当于你举的例子。不加的话类似你只是把值传给了一个临时变量,
并没有改变你所要改变的对象的值。这方面说不太清楚

64,654

社区成员

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

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