00后小哥哥,浅谈C++输入输出流及其重载

简介: 00后小哥哥,浅谈C++输入输出流及其重载

大家好,我是小熊,这篇文章来自你们最喜爱的00后小哥哥,自从发了几篇文章以后我的微信就被加爆了,竟然有女孩子想认识00后小哥哥!魅力那么大吗!!有没有考虑过小熊的感受?



aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS9jb2RpbmczbWluLzIwMjAtMDQtMjItMTM1MDU0LmpwZw.png

浅谈 C++输入输出流及其重载


在学习 C 阶段我们写代码第一句就是#include<stdio.h>,这个到底是什么呢?


include 称为文件包含命令,stdio 为 standard input output 的缩写,意为“标准输入输出”,是一个库,同样在 C++中也存在这样一个标准输入输出库#include,我们称之为标准输入输出流类库。


输入是将数据从输入设备传送到主机内存的过程,输出则是将数据从主机内存传送到输出设备的过程。数据像流水一样在主机和外存设备之间流动,我们形象称之为流。


重载输入/输出运算符


学习完 C 语言后,相信大家和我感受一样就是 C 语言语法要求很严格,用的时候规定很多。比如 scanf 和 printf 这两个函数在使用的时候如果我们制定的数据类型和输入的数据类型不一致的时候,就会出现很多错误。


但是我们在使用 C++的时候,我们不需要关心指定的输入数据类型,这得益于在 C++的(I/O stream)中,对于>>和<<这两个运算符进行了重载。


重载机制是 C++相对于 C 的很大一个改进,我们不需要想不同的名字来实现类似功能,并且我们可以通过重载>>和<<实现用户自定义的输入输出。

我们来看一段代码

class Date
{
private:
  int month;
  int day;
  int year;
public:
  Date(int m = 1,int d = 20,int y = 2020)//构造函数
  {
    month = m;
    day = d;
    year = y;
  }
};

我们创建了个日期类,如果我们现在想直接打印出来这个类的成员这是做不到的。

Date dt(4,22,2020);
  cout << dt;


但是我们如果对<<进行了重载就可以

friend ostream &operator<<(ostream& os, Date date);
ostream &operator<<(ostream& os, Date date)
{
  os << "date.month:"<<date.month << "date.day"<<date.day << "date.year"<<date.year;
  return os;
}

为什么重载为这个类的友元函数?因为运算符<<左边的操作数不是 Date 类型的的对象,是一个流。


友元问题可以看博客https://blog.csdn.net/flf1234567898/article/details/104824230


重载之后我们就可以直接 cout << dt;


再来看>>的重载

friend istream &operator>>(istream &in, Date &dt);
istream &operator>>(istream &in, Date &date)
{
  cout << "day month year" << endl;
  in >> date.day >> date.month >> date.year;
}


这样我们就能直接输入输出对象了


Date dt;//创建对象
  cin >> dt;
  cout << dt << endl;


这样我们就完成了这个 Date 类的输入输出重载,通过重载机制,我们可以大量减少代码量并且方便许多,聪明的你是否学会了呢?

相关文章
|
6天前
|
C++
C++类自加自减与<<运算符的重载实现
C++类自加自减与<<运算符的重载实现
|
6天前
|
存储 算法 编译器
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
66 0
|
6天前
|
存储 算法 C语言
【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]
【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]
22 0
|
6天前
|
算法 C++ 开发者
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
40 0
|
6天前
|
C++ 编译器
|
6天前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
15 2
|
6天前
|
编译器 C语言 C++
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
13 1
【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)
|
6天前
|
C++
【C++小小知识点】重载、覆盖(重写)、隐藏(重定义)的对比【详解】(23)
【C++小小知识点】重载、覆盖(重写)、隐藏(重定义)的对比【详解】(23)
|
6天前
|
算法 安全 编译器
【C++运算符重载】深入理解C++中的类型转换与重载
【C++运算符重载】深入理解C++中的类型转换与重载
34 0
|
6天前
|
算法 程序员 C++
【C++运算符重载】探究C++中的下标运算符[]重载
【C++运算符重载】探究C++中的下标运算符[]重载
17 0