#include <iostream>
#include <string>
//实现++/--运算符重载
class Person
{
friend std::ostream& operator<<(std::ostream& os, Person p1);
public:
Person& operator--()//前置运算符 链式编程,返回引用(本身),如果用值传递,连续调用会出错
{
--this->m_age;
return *this;
}
Person operator--(int)//后置运算符 使用值传递
{
Person temp = *this;
this->m_age--;
return temp; //返回一个局部对象 使用拷贝构造函数 意味着接下来也要使用值传递
//如果<<使用引用传递 找不到temp temp已经被删除 只能输出一个信息
}
private:
int m_age = 0;
};
std::ostream& operator<<(std::ostream& os,Person p1) //不能使用& p
{
std::cout << p1.m_age;//自己定义输出 用友元实现 外部实现能够cout在左,p1在右.
return os; //返回的一定是一个ostream引用
}
int main() {
Person p1;
std::cout << (p1--)<<std::endl;
std::cout << p1<< std::endl;
return 0;
}
输出结果: