C++运算符重载,一道简单的习题,出现错误,求解答。

caosz 发布于 2013/05/28 21:23
阅读 510
收藏 0
#include <iostream>
using std::cout;
using std::endl;
class Point {
public:
	Point(int a=1,int b=1) 
	{
		_x=a;
		_y=b;
	}
	~Point();
	Point& operator ++ () 
	{
		_x++;
		_y++;
		return Point(_x,_y);
	}
	Point operator ++(int)
	{	
		_x++;
		_y++;
		return Point(_x,_y);
	}
	Point& operator --()
	{
		_x--;
		_y--;
		return Point(_x,_y);
	}
	Point operator --(int)
	{
		_x--;
		_y--;
		return Point(_x,_y);
	}	
	void show () {
	cout<<_x<<_y<<endl;
	}
private:
int _x;
int _y;
};
int main () {
	Point a;
	a++;
	a.show;
	++a;
	a.show;
	--a;
	a.show;
	a--;
	a.show;
	return 0;
}
用类型为‘Point’的右值初始化类型为‘Point&’的非常量引用无效
statement cannot resolve address of overloaded function

 
 
 

 

 
 
加载中
0
s
stygvg
#include <iostream>
using std::cout;
using std::endl;
class Point {
public:
	Point(int a=1,int b=1) 
	{
		_x=a;
		_y=b;
	}
	~Point(){};
	Point& operator ++ () 
	{
		_x++;
		_y++;
		return *this;
	}
	Point operator ++(int)
	{	
		_x++;
		_y++;
		return Point(_x,_y);
	}
	Point& operator --()
	{
		_x--;
		_y--;
		return *this;
	}
	Point operator --(int)
	{
		_x--;
		_y--;
		return Point(_x,_y);
	}	
	void show () {
	cout<<_x<<_y<<endl;
	}
private:
int _x;
int _y;
};
int main () {
	Point a;
	a++;
	a.show();
	++a;
	a.show();
	--a;
	a.show();
	a--;
	a.show();
	return 0;
} 

//代码已经帮你修正了,在Visual C++ 6.0 With sp6 编译通过,GCC 编译通过。
caosz
caosz
回复 @stygvg : 好,多谢你。
s
stygvg
回复 @caosz :this指针就指向对象数据的首地址,返回*this当然就是返回当前对象,正确的说法是返回当前对象的引用。
caosz
caosz
答案是对的。Point& 这个要返回的是对象的引用,然后*this返回的就是正在操作函数的对象,这是一种引用,对吗?
0
wangmopp
wangmopp
主要是你那个引用,返回了一局部对象,当++()返回是该被引用的局部对象已不存在,所以引用失恋效了!
wangmopp
wangmopp
@wangmopp 而引用相当与于指针,只是语法不同,现在你想象一下一个指针已经被释放了内存的指针还会有用吗?其实简单来讲就是,你想想找的那个人都不在了你还找得到
wangmopp
wangmopp
@caosz 你返回了一个局部对象,因为当函数返回时局部对象的空间被释放了
caosz
caosz
请详细解释一下,不是很明白,谢谢你啦,感觉你说的是对的
返回顶部
顶部