アクセス修飾子について質問です。

class Hoge
{
private:
int x;
public:
Hoge(int a){ x = a; }
operator+(Hoge hoge);
}
Hoge Hoge::operator+(Hoge hoge)
{
return Hoge(x + hoge.x);
}

演算子オーバーロードのサンプルコードでこのようなものがありました。
xはprivateになっているので、11行目のhoge.xはアクセスできないように思うのですが、
何故これで大丈夫なのでしょうか?
初歩的な質問ですみません。