火星冲日 2023-12-02 18:07 采纳率: 75%
浏览 10
已结题

一个C++基础语法问题

自增运算符++的重载过程中遇到一个问题:

class Person{
public:
    int height = 10;
    Person& operator++(){        //重载前置++
        this->height++;
        return *this;
    }
    Person operator++(int){      //重载后置++
        Person temp = *this;
        this->height++;
        return temp;
    }

}
//重载左移运算符
ostream& operator<<(ostream& cout, Person& p){
    cout<< p.height;
    return cout;
}
int main(){
    Person p1;
    Person p2;
    cout<< p1++ <<endl;   //报错: 二元“<<”: 没有找到接受“Person”类型的右操作数的运算符(或没有可接受的转换)

    cout<< ++p2 <<endl;   //这行没问题
    return 1;
}

为什么报错?难道是因为我重载的左移运算符第二个参数是引用,而后置++返回值是本体?这不对吧?之前学习引用时有这样的写法:
函数形参是引用,传的实参不是自动转引用类型吗?

void add (int& a){
    a += 20;
}
int main(){
    int a = 10;
    add(a);
    cout<<a<<endl;   //30
    return 0;
}

所以是什么问题?

  • 写回答

2条回答 默认 最新

  • 真相重于对错 2023-12-02 19:04
    关注

    p++返回一个临时变量 ,不能用引用直接绑定,需要const 引用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 12月2日