【C++ 基础篇:24】:【重要模板】C++ 输入输出运算符重载【以 Date 日期类为例】

news/2024/11/30 9:44:49/

系列文章说明

本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

  1. 基础篇类与对象(涉及C++的三大特性等);
  2. STL 篇学习使用 C++ 提供的 STL 相关库
  3. 高阶数据结构与算法篇手动实现自己的 STL 库设计实现高阶数据结构,如 B树、B+树、红黑树等。

学习集:

  • C++ 入门到入土!!!学习合集
  • Linux 从命令到网络再到内核!学习合集

文章目录

  • 系列文章说明
  • 前言
  • 一、自定义类型输入输出的问题
  • 二、C++ 输入输出运算符重载写法(以日期类为例)
    • 1.时间类的基本框架
    • 2.输入输出重载说明!
    • 3.输入输出重载写法示例
  • 相关文章


前言

  • 运算符重载函数写法相对固定,在上一期内容中,笔者已给大家介绍并设计实现了关系运算符的重载(点击跳转),解决的自定义类型 / 对象的比较!
  • 本篇文章中,笔者将与大家分享的是 自定义类型 / 对象 的输入输出问题!即:重载 C++ 输入输出运算符

一、自定义类型输入输出的问题

如下图所示:提示:没有与这些操作匹配的 输入 / 输出 运算符! C++本身仅支持内置数据类型的基本输入输出,对于我们自定义实现的类型(如:时间类、学生信息类等),需要自定义重载!

  • >>:流输入运算符;【所处头文件:istream;在 std 命名空间中】
  • <<:流输出运算符;【所处头文件:ostream;在 std 命名空间中】

在这里插入图片描述
在这里插入图片描述


二、C++ 输入输出运算符重载写法(以日期类为例)

1.时间类的基本框架

代码如下(示例):

#include<iostream>
using std::cout;
using std::endl;
using std::cin;class Date {
public:Date(int year = 1970,int month = 1, int day = 1) :_year(year),_month(month),_day(day){}void Print() {cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};

2.输入输出重载说明!

流输入流输出 本身也是对象,分别对应:istream 类ostream 类(关于数据流问题,会在后续内容中再分享!)

  • 返回值类型即:istream / ostream
  • 此前文章也介绍过!输入输出的重载由于可能受类中作用域限制符的约束,一般会采用友元函数的方式加以实现!友元介绍:friend 友元四连问(点此查看)

3.输入输出重载写法示例

代码如下(示例):注意代码中的注释!

#include<iostream>
using std::cout;
using std::endl;
using std::cin;
using std::istream;			/* 注意此处! */
using std::ostream;			/* 注意此处! */class Date {
public:Date(int year = 1970,int month = 1, int day = 1) :_year(year),_month(month),_day(day){}void Print() {cout << _year << "-" << _month << "-" << _day << endl;}/* 流输入输出的重载:注意两个函数的第二个参数写法! */friend ostream& operator << (ostream& out, const Date& d);friend istream& operator >> (istream& in, Date& d);
private:int _year;int _month;int _day;
};/* 流输入输出的重载 */
inline ostream& operator << (ostream& out, const Date& d) {out << d._year << "年" << d._month << "月" << d._day << "日" << endl;return out;
}
inline istream& operator >> (istream& in, Date& d) {in >> d._year >> d._month >> d._day;return in;
}

运行结果示例图(如下)

在这里插入图片描述


相关文章

1. 【C++ 基础篇:21】:friend 友元四连问:什么是友元?友元类?友元函数?什么时候用友元?
2. 【C++ 基础篇:22】:类的 const 对象 与 const 成员函数/方法 以及 类中涉及 const 的常见问题!
3. 【C++ 基础篇:23】:【重要模板】关系运算符重载的设计与实现: [ > 、 < 、 >= 、 <= 、 != 、 == ] 重载【以 Date 时间类为例】



http://www.ppmy.cn/news/351483.html

相关文章

【Python 生成器与迭代器】零基础也能轻松掌握的学习路线与参考资料

一、Python生成器与迭代器概述 Python是一种高级编程语言&#xff0c;其中非常重要的概念就是生成器和迭代器。Python生成器和迭代器联合使用&#xff0c;能够实现高效的迭代操作&#xff0c;避免增加额外的内存消耗&#xff0c;同时提高代码的可读性。Python中常见的生成器和…

机房机柜相关

机柜、服务器的单位U 其实所谓的1U、2U的“U”就是服务器大小的一个单位。 U是一种表示服务器外部尺寸的单位&#xff0c;是unit的缩略语&#xff0c;详细尺寸由作为业界团体的美国电子工业协会&#xff08;EIA&#xff09;决定。 厚度以4.445cm为基本单位。1U就是4.445cm&a…

[902]工控机本机控制界面

目录 准备程序界面 准备 1.ubuntu16建qt界面左上角菜单被遮挡 &#xff08;ubuntu18不用&#xff09; 进入&#xff1a;设置->外观->行为 显示窗口菜单—设置为“在窗口的标题栏” 菜单可见度—设置为“总是显示” 2.在pro文件末尾加入&#xff1a;QMAKE_LFLAGS -no-…

工控GUI

eCGUI功能特性介绍 eCGUI微型16/32位嵌入式GUI,自主开发&#xff0c;历时四年左右&#xff0c;拥有全部版权. 体积小巧 大小在 100KB~180KB&#xff01; 特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组件式 API…

Git第十六讲 Git属性和忽略文件

在使用Git进行版本控制时&#xff0c;我们常常需要忽略某些文件或目录&#xff0c;例如编译产生的临时文件、日志文件等&#xff0c;以避免将它们包含在版本库中。Git属性和忽略文件是两种常用的机制&#xff0c;用于控制文件的跟踪和忽略。本文将介绍如何使用Git属性和忽略文件…

工控机上安装物联网卡

一、进入设置&#xff0c;点更多 二、进入移动网络选项 三、打开移动数据网络漫游 四、打开apn 五、选项处于被选中状态 最后拉下桌面状态菜单进行确认&#xff0c;lte&#xff0c;cmcc&#xff0c;再点开浏览器看看是否可以上网 物联网卡&#xff0c;是中国移动面向物联网用…

工控机主机该怎么加固

工控安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工业控…

工控机主机加固安全浅析

工控安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工业控…