在c++中类的私有成员是不能被直接访问的,需要通过类中提供的成员函数简介的操作这些数据。同时C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。

但是如果直接在类内部直接重载输入、输出流运算符,那么在使用时只能通过Obj>>cin //相当于 Obj.operator>>(cin)

或是Obj<<cout//相当于 Obj.operator<<(cout) 的方式调用,但这种方式不太习惯于我们平时的操作方式,所以很多人通过用友元去实现此类重载。

例如:C++ 输入/输出运算符重载——菜鸟教程

用友元的方式有利有弊,通常它可以在较为频繁访问类私有成员时代替调用函数成员这一步骤,节省一些不必要的调用,减轻代码量提高效率,但同时它也破坏了内的封装性,不安全。

所以,我这里没有采取友元的方式去重载,而是通过在类外新实现了一种方法,在函数内部实现这一过程,而留给用户的接口任然是以前得读写习惯,代码如下:

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;
}

最新文章

  1. TODO:macOS编译PHP7.1
  2. WebApi 学习随笔(一)
  3. storm UI
  4. [ACM_水题] 不要62(hdu oj 2089, 不含62和4的数字统计)
  5. 小学生之KTV播放原理
  6. linux命令readlink
  7. SharePoint Online 创建用户和组
  8. 3.15 总结,初始java
  9. storage和memory
  10. 在 Mac OS X 下,如何向 sudoers 文件添加新用户
  11. Linux TOP命令按内存占用排序和按CPU占用排序
  12. 配置jQuery环境
  13. HTML中的文本标签
  14. 转:cookie.setPath()用法
  15. Dynamics CRM2016 导入数据格式之xlsx的应用
  16. 解决 Faster R-CNN 图片中框不在一张图片上显示的问题
  17. 【分库分表】sharding-jdbc—分片策略
  18. HDU1757
  19. Vue优化首屏加载
  20. idea无法下载源码(Cannot download sources)

热门文章

  1. Oracle 数据库用户锁定与解锁,用户锁定最大密码失败次数设置方法,ORA-28000: the account is locked问题解决方法
  2. SpringBoot进阶教程(七十三)整合elasticsearch
  3. MySQL:Win10系统中设置默认编码为UTF-8
  4. 控制台console不打印信息的解决办法
  5. C# Stopwatch计时统计
  6. C#控制台窗口禁用关闭按钮
  7. Vue3中setup语法糖学习
  8. Redis常用命令代码实例集合
  9. 浏览器中 Http缓存
  10. 如何修改windows Server 2012 远程桌面连接默认端口