C++中关于重载前置自增运算符的问题

请大佬们解释一下以下两段代码的运行结果,主要是++p的结果不明白:

1.

#include<iostream>
using namespace std;
class My
{
	friend ostream& operator<<(ostream& cout, My& p);
	friend My& operator++(My p);
public:
	My()
	{
		x = 0;
	}
private:
	int x;
};

ostream& operator<<(ostream& cout, My &p)
{
	cout <<p.x;
	return cout;
}

My &operator++(My p)//前置++
{
	p.x += 1;
	return p;
}

int main()
{
	My p;
	cout <<++p<<endl;
	cout << p;
}

2.

#include<iostream>
using namespace std;
class My
{
	friend ostream& operator<<(ostream& cout, My p);
	friend My& operator++(My p);
public:
	My()
	{
		x = 0;
	}
private:
	int x;
};

ostream& operator<<(ostream& cout, My p)
{
	cout <<p.x;
	return cout;
}
My &operator++(My p)//前置++
{
	p.x += 1;
	return p;
}

int main()
{
	My p;
	cout <<++p<<endl;
	cout << p;
}

谢谢大佬们了!!!!!

 

friend My& operator++(My p);改成

friend My& operator++(My& p);