自增运算符++的重载过程中遇到一个问题:
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;
}
所以是什么问题?