C++重载输入流、输出流运算符
在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;
}
C++重载输入流、输出流运算符的更多相关文章
- C++重载流插入运算符和流提取运算符【转】
C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream.cin和cout分别是 ...
- C++重载输入流复习
C++重载输入流 #include <bits/stdc++.h> using namespace std; struct Point { int x, y; Point(int xx, ...
- C++运算符重载——输入/输出运算符
为了与IO标准库一致,重载输入输出运算符函数的第一个行参应该是流的引用,第二个行参是对象的引用. 如果重载为类的成员函数,第一个行参应该是对象的引用,第二个行参是流的引用. 使用方式是 ClassOb ...
- operator 重载内置运算符
operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换.它可以定义不同类型之间采用何种转化方式和转化的结果. operator用于定义类型转化时可采用2种方式,隐式转换(impl ...
- C++中不可重载5个运算符
C++中不可重载的5个运算符 C++中的大部分运算符都是可以重载的,只有以下5个运算符不可以重载,他们是: 1 .(点运算符)通常用于去对象的成员,但是->(箭头运算符),是可以重载的 2 ...
- 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符
第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...
- C++中输出流运算符的重载
cout是ostream类的对象,cin是istream类的对象. 我们平时用的cout<<就相当于cout.operator<<(...).也就是说正常使用(不对operat ...
- Java总结输入流输出流
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:618528494 我们一起学Java! 1.什么是IO Java中I/O操作主要是指使用 ...
- C++学习29 重载[](下标运算符)
前面已经提到,下标操作符[]必须以类的成员函数的形式进行重载.在类中的声明格式如下: 返回值类型 & operator[] (参数) 或 const 返回值类型 & operator[ ...
随机推荐
- hadoop 无法访问50070
windows无法访问hadoop web端口 windows hosts文件:C:\Windows\System32\drivers\etc centos防火墙没有关,关闭参考 hadoop cor ...
- Windows server 2008 R2 多用户远程桌面配置详解(超过两个用户)
转至:https://www.jb51.net/article/139542.htm 注意:一下是针对win2008 server r2的操作 1. 创建三个本地管理员测试用户 user01 use ...
- 第九周shell脚本编程练习
转至:http://www.178linux.com/88838 1.写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin):分别这两 ...
- Linux修改权限命令chmod用法示例
Linux公社 2020年10月13日 来自:Linux迷 网址:https://www.linuxmi.com/linux-chmod.html Linux中的Chmod命令用于更改或分配文件和目录 ...
- java创建线程的四种方法
第一种: 通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runna ...
- WPS:字母自动变大写的解决办法
设置中:
- JZ-043-左旋转字符串
左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S, 请你把其循环左移K位后的序列输出.例如,字符 ...
- LeetCode-031-下一个排列
下一个排列 题目描述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须 原地 修 ...
- LeetCode-103-二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历 题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 示例说明请见LeetCode官网. 来源:力 ...
- VirtualBox虚拟机--桥接模式
问题概述:VirtualBox虚拟机设置桥接模式,与宿主机互相ping通. 注:如果按照以下方式设置了还是ping不通,查看虚拟机防火墙是否已关. 公司电脑拿去维修了,在自己家里电脑上部署项目开发环境 ...