C++重载输入流、输出流运算符
2024-09-01 13:34:19
在c++中类的私有成员是不能被直接访问的,需要通过类中提供的成员函数简介的操作这些数据。同时C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。
但是如果直接在类内部直接重载输入、输出流运算符,那么在使用时只能通过Obj>>cin //相当于 Obj.operator>>(cin)
或是Obj<<cout//相当于 Obj.operator<<(cout) 的方式调用,但这种方式不太习惯于我们平时的操作方式,所以很多人通过用友元去实现此类重载。
用友元的方式有利有弊,通常它可以在较为频繁访问类私有成员时代替调用函数成员这一步骤,节省一些不必要的调用,减轻代码量提高效率,但同时它也破坏了内的封装性,不安全。
所以,我这里没有采取友元的方式去重载,而是通过在类外新实现了一种方法,在函数内部实现这一过程,而留给用户的接口任然是以前得读写习惯,代码如下:
class Date
{
private:
int year;
int month;
int day;
public:
Date() {}
~Date() {}
istream & operator>>(istream &in)
{
in>>year>>month>>day;
return in;
}
ostream & operator<<(ostream &out) const
{
out<<year<<" "<<month<<" "<<day<<" ";
return out;
}
};
istream & operator>>(istream &in,Date &date)
{
date>>in;
return in;
}
ostream & operator<<(ostream &out,const Date &date)
{
date<<out;
return out;
}
最新文章
- TODO:macOS编译PHP7.1
- WebApi 学习随笔(一)
- storm UI
- [ACM_水题] 不要62(hdu oj 2089, 不含62和4的数字统计)
- 小学生之KTV播放原理
- linux命令readlink
- SharePoint Online 创建用户和组
- 3.15 总结,初始java
- storage和memory
- 在 Mac OS X 下,如何向 sudoers 文件添加新用户
- Linux TOP命令按内存占用排序和按CPU占用排序
- 配置jQuery环境
- HTML中的文本标签
- 转:cookie.setPath()用法
- Dynamics CRM2016 导入数据格式之xlsx的应用
- 解决 Faster R-CNN 图片中框不在一张图片上显示的问题
- 【分库分表】sharding-jdbc—分片策略
- HDU1757
- Vue优化首屏加载
- idea无法下载源码(Cannot download sources)