c++对象的自加问题!

发布时间:2024-05-21 14:45 发布:上海旅游网

问题描述:

#include<iostream>
using namespace std;
int x=2,y=x+30;
class A{ int y;
static int x;
public:
operator int()
{return x+y;}
A operator ++(int)
{return A(x++,++y);}
A(int x=2,int y=3)
{A::x=::x+x; A::y=::y+y;}
void print()
{cout<<x<<' '<<y<<'\n';}
};
int A::x=23;
void main()
{A c;
c++;c.print();
} 结果是6 36 ;
常理来说应该y也是35 或者x=7,y=36。 要加大家一起加嘛,怎么加一个!请详细说明下,困扰了很多人!!
6应该是4+2得到的吧!那36就是32+4了。问题是y的4应该是1+3的,但是X应该也是4+2+1等于7吧! 或者Y=32+3才是35怎么是36呢??

问题解答:

这句是关键 return A(x++,++y);

这句看上去LZ的想法应该是会进行 (A::y)=(::y)+y; 这句的操作然后 y 自增一吧

确实是

但这里的 A::y 并不是 c.y

因为你这句所调用的函数不是普通的函数
而是构造函数!
所以这里的A::y已经是一个新的 A 对象里面的 y 了
于是 c.y 只是进行了 ++ 的步骤
35变成36...

不知我这么说你明白否

如果还是不明白的话可以把你的main函数改一下
void main()
{
A c;
A d;
d = c++;
c.print();
}

看看 d.y 的值
这个 d.y 就是执行 (A::y)=(::y)+y; 后 A::y 的值了
即 32 + c.y
c.y的值是 36
出来的 d.y 就是 68 了
实在还是不明白的话我在想想如何说明吧- -

热点新闻