/*
运算符重载有两种方式:
1. 成员函数形式实现重载
格式: L#R---> operator#(Object R);
# 号表示要重载的运算符
2. 全局函数形式实现重载
格式: L#R---> operator#(Object L, object2 R);
*/
#include<iostream>
using namespace std;
class Integer{
private:
int x;
public:
Integer(int x = 0):x(x){} // 默认参数 和 参数列表
int getX() const { // const定义的对象才能访问const函数
return x;
}
// friend函数声明
friend ostream& operator<<(ostream& os, const Integer& data);
friend istream& operator>>(istream& is, Integer& data);
};
/* =======================================================
实现 << 和 >> 的重载:
函数形参说明
1)将返回值设计成ostream&/istream& 是为了连续输出
2)访问private成员时,可以在类内声明friend函数
3)ostream/istream& 不能赋值(不能拷贝构造),只能加&,不能加const
4)const 可以适应临时输入对象,& 可以减少拷贝
5)重载 >> 时,不能加const,因为要修改输入对象的成员
============================================================*/
ostream& operator<<(ostream& os, const Integer& data){
return os<<data.x;
}
istream& operator>>(istream& is, Integer& data){
return is>>data.x;
}
int main(){
Integer data(10);
cout << data<<endl;;
cin >> data;
cout << data << endl;
return 0;
}