2
回答
C++运算符重载,一道简单的习题,出现错误,求解答。
#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

 
 
 

 

 
 
<无标签>
举报
caosz
发帖于5年前 2回/502阅
共有2个答案 最后回答: 5年前
#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 编译通过。
--- 共有 3 条评论 ---
caosz回复 @stygvg : 好,多谢你。 5年前 回复
stygvg回复 @caosz :this指针就指向对象数据的首地址,返回*this当然就是返回当前对象,正确的说法是返回当前对象的引用。 5年前 回复
caosz答案是对的。Point& 这个要返回的是对象的引用,然后*this返回的就是正在操作函数的对象,这是一种引用,对吗? 5年前 回复
主要是你那个引用,返回了一局部对象,当++()返回是该被引用的局部对象已不存在,所以引用失恋效了!
--- 共有 3 条评论 ---
wangmopp@wangmopp 而引用相当与于指针,只是语法不同,现在你想象一下一个指针已经被释放了内存的指针还会有用吗?其实简单来讲就是,你想想找的那个人都不在了你还找得到 5年前 回复
wangmopp@caosz 你返回了一个局部对象,因为当函数返回时局部对象的空间被释放了 5年前 回复
caosz请详细解释一下,不是很明白,谢谢你啦,感觉你说的是对的 5年前 回复
顶部