C++之“流”-第5课.三军联动:流 +操作符+函数重载

如何针对特定函数类型重载流输出操作符?这样做有什么用处?C++语言中,“流”、“操作符”、“函数重载” 这三大军团如何配合作战?

流、操作符、函数重载

前言

C++中,“流” 的日常运用,最基本的就是在你的代码里使用 << 和 >> 操作符,比如:

int age;
cin >> age; // 使用流输入操作符 >>
cout << "你的年龄:" << age; // 使用 流输出操作符 << 

高级一点的使用,就是为自定义的类型,重载 << 和 >> :

struct Point {int x, y;}using namespace std;// 为 Point 类型重载流输出操作
ostream& operator << (ostream& os, Point const& pt)
{os << pt.x << ' ' << pt.y;return os;
}// 为 Point 类型重载流输入操作
istream& operator >> (istream& is, Point& pt)
{is >> pt.x >> pt.y;return is;
}

这一节我们借助对流、操作符、函数综合复习所要讲的用法,似乎更“高级”了:我们需要用流对象来输入或输出(课程以前者为例)特定类型的函数。

这么做,是为了能够实现类似我们下一节需要的“日志流”功能奠定知识基础;所以这一节课,我们一定要掌握:针对特定类型的函数,为流输出操作符(也就是 << )提供重载。

视频

C++之“流”-第5课-三军联动:流、操作符、函数重载

代码演化

1:输出 int (int, int) 类型的函数

#include <iostream>using namespace std;/* 下面的 add 和 sub,类型都是 int(int, int) */int add(int a, int b) 
{return a + b;
}int sub(int a, int b)
{return a - b;
}// 为 int (int, int) 类型的函数,重载流输出操作符 <<
ostream& operator << (ostream& os, int (f) (int, int))
{os << f(1, 2); // 参数固定为 1,2return os;
}int main()
{cout << add << ", " << sub << endl; // 完美结合
}

在线运行:流输出 int (int, int) 类型的函数示例代码

2:输出 ostream& (ostream&) 类型的函数

#include <iostream>using namespace std;ostream& say_OK(ostream& os) // 和 std::endl 类型一样的示例函数
{os << "OK!";return os;
}void test()
{cout << "Are you OK? " << say_OK << say_OK << say_OK << endl;
}int main()
{test();
}

在线运行:流输出 ostream& (ostream&) 类型的函数示例代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程(19)——引用计数型无锁栈

文章目录 十九、day191. 引用计数2. 代码实现2.1 单引用计数器无锁栈2.2 双引用计数器无锁栈 3. 本节的一些理解 十九、day19 上一节我们学习通过侯删链表以及风险指针与侯删链表的组合两种方式实现了并发无锁栈&#xff0c;但是这两种方式有以下缺点&#xff1a; 第一种方式…

【微信小程序】2|轮播图 | 我的咖啡店-综合实训

轮播图 引言 在微信小程序中&#xff0c;轮播图是一种常见的用户界面元素&#xff0c;用于展示广告、产品图片等。本文将通过“我的咖啡店”小程序的轮播图实现&#xff0c;详细介绍如何在微信小程序中创建和管理轮播图。 轮播图数据准备 首先&#xff0c;在home.js文件中&a…

tortoisegit推送失败

tortoisegit推送失败 git.exe push --progress -- "origin" testLidar:testLidar /usr/bin/bash: gitgithub.com: No such file or directory fatal: Could not read from remote repository. Please make sure you have the correct access rights and the reposit…

WebGIS实战开源项目:智慧机场三维可视化(学习笔记)

From&#xff1a;新中地 1.简介 智慧机场解决方案&#xff0c;基于数字化大平台&#xff0c;融合AI、大数据、IoT、视频云、云计算等技术&#xff0c;围绕机场“运控、安防、服务”三大业务领域&#xff0c;构建“出行一张脸”及“运行一张图”两大场景化解决方案。 https://…

C++----类与对象(下篇)

再谈构造函数 回顾函数体内赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date{ public: Date(int year, int month, int day) { _year year; _month month; _day day; } private: int _year; int _mo…

重装系统后的那点事儿

每次重装系统完&#xff0c;总是有这有那的问题&#xff0c;比如这几个常见问题&#xff0c;各种C盘的数据最好在重装系统前备份哦&#xff0c;不然有点小麻烦&#xff0c;要下载好多东西&#xff01;&#xff01; 文章目录 需要新应用打开此 ms-paint新链接搜索框不见了 需要…

ROS2中通过launch读取.yaml配置文件启动节点

环境&#xff1a;Ubuntu22.04&#xff0c;ROS2-humble 通过修改.yaml配置文件中的参数&#xff0c;可以不用重新编译源代码进行软件调试。 1.yaml文件格式 bag_to_image_node&#xff1a;运行的ROS2节点名称 参数格式参考如下&#xff1a; bag_to_image_node:ros__parameters…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日&#xff0c;链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网&#xff0c;同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS&#xff0c;其采用四层网络架构&#xff0c;其中…

【文档搜索引擎】搜索模块的完整实现

调用索引模块&#xff0c;来完成搜索的核心过程 主要步骤 简化版本的逻辑&#xff1a; 分词&#xff1a;针对用户输入的查询词进行分词&#xff08;用户输入的查询词&#xff0c;可能不是一个词&#xff0c;而是一句话&#xff09;触发&#xff1a;拿着每个分词结果&#xf…

MySQL 数据库优化详解【Java数据库调优】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

ensp 关于acl的运用和讲解

ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种常用于网络设备&#xff08;如路由器、交换机&#xff09;上的安全机制&#xff0c;用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口&#xff0c;基于不同的…

突围边缘:OpenAI开源实时嵌入式API,AI触角延伸至微观世界

当OpenAI宣布开源其名为openai-realtime-embedded-sdk的实时嵌入式API时&#xff0c;整个科技界都为之震惊。这一举动意味着&#xff0c;曾经遥不可及的强大AI能力&#xff0c;如今可以被嵌入到像ESP32这样的微型控制器中&#xff0c;真正地将AI的触角延伸到了物联网和边缘计算…

知识中台与人工智能:融合赋能企业智能化知识服务与决策

在数字化、智能化的时代背景下&#xff0c;企业面临着前所未有的机遇与挑战。为了提升知识管理与服务的能力&#xff0c;推动企业的智能化转型与发展&#xff0c;知识中台与人工智能的融合应用正成为新的趋势。知识中台作为连接数据、知识与业务的核心平台&#xff0c;能够为企…

《Web 项目开发之旅》

一、项目简介 介绍项目的背景与目标&#xff0c;说明为什么要开展这个 Web 项目。展示项目最终完成后的整体页面截图&#xff0c;让读者对项目外观有初步印象。 二、技术选型 阐述在项目中使用的前端技术&#xff08;如 HTML、CSS、JavaScript 框架等&#xff09;、后端技术…

VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Java开发环境搭建二、VScode下载及安装三、VSCode配置Java环境四、运行测试五、背景图设置 很高兴你打开了这篇博客&#xff0c;更多详细的安装教程&…

【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码

文章目录 一、 应用场景1、GeoJSON2、ESRI Shapefile3、GDAL 二、基本思路1、数据准备2、重投影&#xff08;可选&#xff09;3、创建空的矢量图层4、栅格转矢量 三、完整代码四、总结五、拓展&#xff08;使用ArcGIS工具进行栅格转矢量&#xff09; 一、 应用场景 TIFF格式的…

计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

JVM系列(十三) -常用调优工具介绍

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

Hive其四,Hive的数据导出,案例展示,表类型介绍

目录 一、Hive的数据导出 1&#xff09;导出数据到本地目录 2&#xff09;导出到hdfs的目录下 3&#xff09;直接将结果导出到本地文件中 二、一个案例 三、表类型 1、表类型介绍 2、内部表和外部表转换 3、两种表的区别 4、练习 一、Hive的数据导出 数据导出的分类&…

使用RKNN进行YOLOv8人体姿态估计的实战教程:yolov8-pose.onnx转yolov8-pose.rknn+推理全流程

之前文章有提到“YOLOv8的原生模型包含了后处理步骤,其中一些形状超出了RK3588的矩阵计算限制,因此需要对输出层进行一些裁剪”,通过裁剪后得到的onnx能够顺利的进行rknn转换,本文将对转rnkk过程,以及相应的后处理进行阐述。并在文末附上全部源码、数据、模型的百度云盘链…