#include<iostream>
using namespace std;
class book
{
private:int inch;
int feet;
public:
book()
{
inch = 0;
feet = 0;
}
book(int i, int f)
{
inch = i;
feet = f;
}
friend ostream& operator <<(ostream& os, const book &book1)
{
os << book1.inch << book1.feet;
return os;
}
~~friend istream&operator>>(istream& is,const bool &bool1)~~
**friend istream& operator>>(istream& is, book &book1)**
{
is >> book1.inch >> book1.feet;
return is;
}
};
int main()
{
book book1(8, 9), book2(9, 0), book3;
cin >> book3;
cout << book1 << endl << book2 << endl << book3 << endl;
return 0;
}
1, friend istream& operator>>(istream& is, book &book1)
因为是对>>进行重载,所以会对book1会输入数据,改变数据,所以,不可像其他重载运算符一样,加const。
2, 之所以 os 前加 &,是因为无法直接复制ostream对象。
3, 之所以此重载是友元函数,而不是类的成员函数,一方面如果是成员函数,则操作符左侧运算对象必须为类的一个对象。另一方面,友元可以读写非公有数据成员。
4,至于为何 operator前要加 & 是因为返回的os为ostream& 类型,而至于为何是ostream类型,则是2,
它和递增递减运算符的重载不同的是,>>和<<实在cout 和类名中间使用的。cout 从属于ostream 在重载中被ostream&了,类名同理也被 类& 引用了。
递增递减运算符是在类前或类后使用的,所以,函数里只包含一个参数,那就是和它离得最近得类。