重载运算符 输入输出

#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&了,类名同理也被 类& 引用了。
递增递减运算符是在类前或类后使用的,所以,函数里只包含一个参数,那就是和它离得最近得类。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值