E3231323 2020-01-28 19:36 采纳率: 0%
浏览 229

请问重载流插入运算符<<怎么不能识别定义的类?

大佬们帮忙看看。重载了<<和自增运算符,用来输出自己定义的Point类,前缀++正常输出,后缀++报错:
没有与这些操作数匹配的"<<"运算符,操作类型为ostream<<Point。但是p++的返回值就是Point啊?
代码如下:

//通过重载实现点类的自增自减和输出

#include <iostream>


using namespace std;


class Point
{
    int _x, _y;
public:
    Point(int x, int y) :_x(x), _y(y) {}
    Point& operator ++();//前置++不需要参数
    Point operator ++(int);//后置++需要参数来作为标志
    Point& operator --();
    Point operator --(int);
    friend ostream& operator << (ostream& o, Point& p);
};
Point& Point:: operator ++ ()
{
    _x++;
    _y++;
    return *this;
}
/* ++i在c++的定义最后返回的是对象的引用*/
Point Point::operator ++ (int)
{
    Point temp = *this;
    ++* this;
    return temp;
}
/* i++在c++的定义中返回的是对象的值
   后缀操作符接受一个额外的int型作为形参,并不使用该形参仅做区分*/

Point& Point::operator --()
{
    _x--;
    _y--;
    return *this;
}

Point Point::operator --(int)
{
    Point temp = *this;
    ++* this;//复用了前缀++的重载
    return temp;
}

ostream& operator << (ostream& o, Point& p)
{
    o << "(" << p._x << "," << p._y << ")" << endl;
    return o;
}

int main()
{
    Point p(1, 2);
    cout << p << endl;
    //cout << p++ << endl;//重载的后缀++和--都不能被<<识别
    cout << ++p << endl;
    //cout << p-- << endl;//
    cout << --p << endl;

    return 0;

}




  • 写回答

1条回答

  • dabocaiqq 2020-01-28 22:10
    关注
    评论

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码