C++流插入、提取重载详解

内置类型支持流插入
自定义类型不支持流插入

注意:运算符重载如果有两个操作数的时候,第一个为左操作数,第二个为右操作数
而成员函数的第一个参数默认为this基类,而this参数又不能显式书写,所以没法改
也就是说第一个操作数只能为基类对象,第二个操作数是传参的参数

所以,当流操作做运算符重载时:
第一个参数为基类this
第二个操作数自然为流
所以,就导致了,流插入的第一个操作数为this,第二个操作数才是cout
总之,第一个参数作为左操作数,第二个参数作为第二个操作数
所以,如果看起来是将控制台流入我们的对象
这是将之流运算符写在类内部成员函数的结果

但是这不符合我们的思维
形成以上问题的本质是因为,作为成员函数重载,this指针占据了第一个参数
导致类对象必须是左操作数
而要解决这个问题
很简单
不要写在成类内部的成员函数即可
也就是说,将之写成为全局函数
但是,问题又来了
全局函数意味着不在类内部
但是流操作符重载的意义在于打印类对象的数据
然而,类对象的数据是封装在类域内部的
而且一般来说,其作用域是限定为私有的private
所以,如果我们非要这样去书写,那就只有将之定义为pubilc共有
但是这又涉及到一个数据安全的问题
那么,怎么办?


有两个解决方案:
一是是用get和set成员函数获取和设置类数据
二是使用友元声明
什么是友元声明?
就是将一个全局函数的声明为friend
一般的理解就是,我已经是你的朋友了,可以访问你的私有
现在就可以解决参数顺序的问题

但是,以上的重载是不支持连续赋值的,连续赋值必须注意的一点是返回值
一般来说,连续赋值是从右到左
但是,现在的流插入的书写顺序是从左到右
返回值得改成ostream流
这样就可以支持连续赋值

流插入打印和printf的区别:
在原来的C语言只能支持%d、%c、%f、%p等特定数据类型的打印
只能打印内置类型
但是,如果是自定义类型,就没办法打印
如果非要用printf,只能一个数据一个数据的比对类型的进行输出
而且,如果一个数据是私有限定
还涉及到一个访问的问题
总之,不好处理
但是有了流插入之后
就解决了所有自定义类型的打印问题

流提取:>>
和上述流插入一样的逻辑
但是第二个类对象的参数不能限定为const
因为要从流中提取数据放到类对象里面,要改变值

觉得有用就给博主点个赞吧!谢谢啦!嘻嘻嘻

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

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

相关文章

JAVA-----

标识符 标识符可以简单的理解为一个名字,在Java中,我们需要给代码中的很多元素起名字,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被叫做是标识符。一个正确的标识符需要遵循以下规则: 1.标识符可以由字母、…

PYTHON初级笔记1

0、python? 简单的编程语言 python环境搭建: ①、开发环境:vscode、sublime、pycharm...... ②、运行环境:cpython解释器 python如何写代码? ①、在终端上的命令行上写,可以是我们cmd的中终端,…

MATLAB 公共区域的点云合并(46)

MATLAB 公共区域的点云合并(46) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 点云配准后,或者公共区域存在多片点云对场景进行冗余过量表达时,我们需要将点云进行合并,Matlab点云工具中提供了这样的合并函数,通过指定网格步长,对初始点云进行过滤。 函数主要实…

分治——快速排序算法

例题一 解法(快排思想 - 三指针法使数组分三块): 算法思路: 类⽐数组分两块的算法思想,这⾥是将数组分成三块,那么我们可以再添加⼀个指针,实现数组分 三块。 设数组⼤⼩为 n &#xff0c…

非计算机科班如何丝滑转码:规划、前景与行动建议

近年来,计算机领域因其广阔的应用前景和优厚的薪资待遇,吸引了众多非计算机科班出身的人士想要转行。然而,对于没有专业背景的他们来说,如何实现从其他行业到计算机领域的丝滑转码,确实是一个值得深思的问题。以下是我…

nextjs getServerSideProps 获取url中的参数

在 Next.js 中,可以使用 getServerSideProps 函数的上下文对象来获取 URL 中的参数。getServerSideProps 函数接收一个上下文对象(通常命名为 context),其中包含了有关请求的信息,包括查询参数、路径参数等。 以下是一…

数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:数据分析系统化教学,零基础到进阶实战 景天的主页:景天科技苑 文章目录 Streamlit什么是streamli…

Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!

文章目录 前言国际化翻译Api选择小牛测试 语言选择代码逻辑实体对象翻译帮助类导出模板读取文件翻译测试多语言测试 综合翻译文件准备测试代码测试结果 完整代码实体类翻译帮助类网络帮助类 最终效果翻译前翻译中翻译后 总结 前言 为了面向更大的市场,国际化是肯定…

毫米波雷达简介

毫米波雷达简介 附赠自动驾驶学习资料和量产经验:链接 1. 概述 1.1 发展历史 RADAR是RAdio Detection And Ranging的缩写。 1936年1月,英国架起了第一个雷达站,用于监测德国战机。从此之后,雷达技术开始蓬勃发展。 雷达的频段很…

软件测试基础(1)

软件测试的生命周期 软件测试的生命周期: 需求分析 -> 测试计划 -> 测试设计, 测试开发 -> 测试执行 -> 测试评估. 软件测试 & 软件开发的生命周期 1.需求阶段 测试人员了解需求, 对需求进行分解, 得出测试需求. 2.计划阶段 根据需求编写测试计划/测试方案 3…

Web核心

目录 Web核心HTTP概念:协议特点:请求数据格式响应数据格式 Tomcat简介基本使用配置部署项目IDEA中创建 Maven Web 项目 IDEA使用Tomcat Servlet简介快速入门执行流程生命周期体系结构Servlet urlPattern配置一个Servlet,可以配置多个 urlPatt…

Java函数式编程-Stream流

Java函数式编程-Stream流 1.概述为什么学?函数式编程思想优点 2.Lambda表达式2.1概述2.2核心原则2.3 基本格式例一例二 2.4省略规则 3.Stream流概述3.2案例数据准备3.3快速入门3.3.1需求3.3.2实现 3.4常用操作3.4.1创建流3.4.2中间操作filtermapdistinctsortedlimit…

java-springboot实现图片的上传

我们在resources目录下创建image目录来存放上传的图片 service层懒的写,就都写controller层了。 RestController RequestMapping("/upload") public class upload {PostMapping("/pic")public String upLoad(RequestParam("multipartFile…

PTA金字塔游戏

幼儿园里真热闹,老师带着孩子们做一个名叫金字塔的游戏,游戏规则如下: 首先,老师把孩子们按身高从高到矮排列,选出最高的做队长,当金字塔的塔顶,之后在其余小朋友里选出两个最高的,…

12个好玩又实用的Python迭代器和生成器实例

大家好!今天我们要来一场编程奇趣之旅,一起揭秘那些既让代码变得更简洁高效,又能带你领略Python魅力的12个迭代器和生成器实例。别担心,我会用轻松易懂的语言帮你掌握这些小技巧,准备好你的笔记本,咱们这就…

Vue3 + Vite + TS + Element-Plus + Pinia项目整理(2)

1、清空App.vue文件内容&#xff0c;替换成下面 <template><router-view></router-view> </template> 2、清空style.css文件内容&#xff0c;替换成下面内容 *{margin: 0;padding: 0;list-style: none;text-decoration: none;outline: none;box-siz…

MySQL 练习三

select sname,sex,class from student;select distinct depart from teacher;select * from student;select * from score where degree between 60 and 80;select * from score where degree in(85,86,88);select * from student where class’95031’ or sex’女’;select * …

RAG( Retrieval Augmented Generation)简单实现

RAG基础知识: https://python.langchain.com/docs/use_cases/question_answering/ 本文主要讲解通过Langchain 和Ollama这2个工具实现RAG。 Langchain: https://python.langchain.com/docs/get_started/introduction Ollama: https://ollama.com/ 先简单理清一下RAG, Langc…

transductive transfer learning

如图所示&#xff0c;传统的机器学习方法尝试去学习每一种任务&#xff0c;而迁移学习则根据已经学习处理过的任务推广到有较少训练数据的新任务上。在传统的机器学习中&#xff0c; transductive learning指所有测试数据在训练时被要求看到的情况&#xff0c;并且对于新的数据…

谈谈计算机科学与技术这门专业

原文地址&#xff1a;谈谈计算机科学与技术这门专业 - Pleasure的博客 下面是正文内容&#xff1a; 前言 这是一篇个人性质的笔记。 专业代码080901 或许也可以理解为计算机科学与技术专业大致都要经历的学习路线&#xff08;主要还是根据本校&#xff09;。 正文 主要专业课程…