C++中自定义类型使用标准输入cin输出cout

自定义类型的输出

  • 引言
  • 示例一
  • 运行结果
  • 示例二
  • 运行结果
  • 注意点

引言

当自己定义的数据为一些复杂数据,不再为基本数据类型,这时候要使用cout输出这些数据,就需要重载输出运算符<<,这样就可以使用cout来输出自定义的数据,相同如果想使用cin来输入自定义的类型,也得定义输入运算符重载函数。

示例一

本示例将一个自定义的数据类型——结构体,其类型的数据存入到一个链表中,需要输出当前的链表中的数据。
下面是一个简单的示例的代码。

#include <iostream>
#include <list>using namespace std;
struct person {string name;int age;string gender;person(string name,int age,string gender) {this->name = name;this->age = age;this->gender = gender;}	
};ostream& operator<<(ostream& o, const person& per) {o << "name:" << per.name << " age:" << per.age << " gender:" << per.gender;return o;
}int main()
{list<person> listPerson;listPerson.emplace_back("liyang", 2, "man");for (const auto &val :listPerson) {cout << val << " ";}cout << endl;return 0;
}

运行结果

在这里插入图片描述

示例二

在示例一的基础上,增加输入运算符的重载,可以输入自定义类型的数据。
下面是代码实现:

#include <iostream>
#include <list>using namespace std;
struct person {string name;int age;string gender;person() {name = "";age = 0;gender = "";}person(string name,int age,string gender) {this->name = name;this->age = age;this->gender = gender;}	friend ostream& operator<<(ostream& o, const person& per) {o << "name:" << per.name << " age:" << per.age << " gender:" << per.gender;return o;}friend istream& operator>>(istream &i,person & p) {i >> p.name >> p.age >> p.gender;return i;}
};int main()
{list<person> listPerson;listPerson.emplace_back("liyang", 2, "man");for (const auto &val :listPerson) {cout << val << " ";}cout << endl;person obj2;cout << "please input name ,age,gender:" << endl;cin >> obj2;//每输入一个字段之后需要换行listPerson.emplace_front(obj2);for (const auto& val : listPerson) {cout << val << " "<< endl;}return 0;
}

运行结果

在这里插入图片描述

注意点

  • 重载输出运算符<<时,不能定义为成员函数,可以放在自定义类型的外面,也可以将其定义为该类的友元函数。
  • 输出运算符重载需要传入两个参数,一个是输出运算符的引用,一个是自定义类型的常引用。
  • 返回输出运算符的引用。

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

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

相关文章

时间序列预测入门:使用Python和ARIMA模型进行股票价格预测

文章标题&#xff1a;时间序列预测入门&#xff1a;使用Python和ARIMA模型进行股票价格预测 简介 时间序列预测是数据分析中的一个重要领域&#xff0c;它涉及根据历史数据的模式和趋势来预测未来的数值。ARIMA&#xff08;自回归综合移动平均&#xff09;模型是一种常用的时…

嵌入式学习日记 20

时间获取 1. time: time_t time(time_t *tloc); 功能: 返回1970-1-1到现在的秒数&#xff08;格林威治时间&#xff09; 参数: tloc:存放秒数空间首地址 返回值: 成功返回秒数 失败返回-1 time(&t) …

openssl交叉编译问题

最近在编译openssl-1.1.0f的时候&#xff0c;执行config以后&#xff0c;会提示 target already defined - linux-x86_64 (offending arg: linux-x86_64) 或者在config通过以后&#xff0c;编译的时候提示 cc1: error: unrecognized command line option "-m64" 目前…

【高阶数据结构】B+树

文章目录 1. B树的概念2. B树的查找3. B-树 VS B树4. B 树的插入分析 1. B树的概念 B树是B树的变形&#xff0c;是在B树基础上优化的多路平衡搜索树&#xff0c;B树的规则跟B树基本类似&#xff0c;但是又在B树的基础上做了一些改进优化。 一棵m阶的B树需满足下列条件&#x…

算法刷题:找到字符串中所有的字母异位词

找到字符串中所有的字母异位词 .题目链接题目详情题目解析算法原理滑动窗口流程图定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 找到字符串中所有的字母异位词 题目详情 题目解析 所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词 如:abc-&g…

C语言奇技Y巧之sscanf函数用法详解

目录 sscanf函数介绍一般用法&#xff1a;读取字符串、整型、浮点数sscanf 使用正则表达式sscanf 返回-1sscanf 解析失败处理sscanf 缺点 sscanf函数介绍 sscanf&#xff0c;C语言中的函数&#xff0c;读取格式化的字符串中的数据。 #include <stdio.h> int sscanf(con…

图片怎么变成透明背景?分享这些变透明的方法

很多从事编辑和图片设计的同行在日常工作中经常需要处理图片的背景色。为了更好地进行设计和编辑&#xff0c;将图片的背景色替换成透明是非常必要的。然而&#xff0c;对于一些新手来说&#xff0c;使用专业的图像处理软件可能有些困难。不过&#xff0c;现在有很多在线的图像…

N5182A MXG 矢量信号发生器,100 kHz 至 6 GHz

N5182A MXG 矢量信号发生器 简述&#xff1a; Agilent N5182A 具有快速频率、幅度和波形切换、带有电子衰减器的高功率和高可靠性——所有这些都在两个机架单元 (2RU) 中。安捷伦 MXG 矢量针对制造蜂窝通信和无线连接组件进行了优化。安捷伦 MXG 矢量通过增加吞吐量、提高测试良…

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN&#xff08;即 k 最近邻算法&#xff09;是一种机器学习算法&#xff0c;它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习&#xff08;lazy learning&#xff09;” 名…

IO进程:多进程实现文件的拷贝

1.使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源 程序代码&#xff1a; 1 #include<myhead.h>2 int main(int argc, const char *argv[])3 {4 //判断传入的文件个数5 if(argc!3)6 …

nginx upstream server主动健康监测模块添加https检测功能【上】

1 缘起 前面的《nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析》系列已经分析了ngx_http_upstream_check_module的实现原理&#xff0c;并且在借助这个模块的框架实现了一个udp健康检测的新功能。   但是ngx_http_upstream_check_mod…

Arcmap excel转shp

使用excel表格转shp的时候&#xff0c;如果你的excel里面有很多字段&#xff0c;直接转很大概率会出现转换结果错误的情况&#xff0c;那么就需要精简一下字段的个数。将原来的表格文件另存一份&#xff0c;在另存为的文件中只保留关键的经度、纬度、和用于匹配的字段即可&…

LeetCode JS专栏刷题笔记(一)

一、前言 LeetCode 在前不久出了一个 JavaScript 专栏&#xff0c;这个专栏一个目的是为了非前端工程师学习 JS&#xff0c;另一个是为了前端工程师提升 JS 能力。 因此在这个专栏中&#xff0c;基本不涉及什么具体算法问题&#xff0c;都是一些 JS 的入门语法与常见的 JS 面…

redis分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…

前端秘法基础式终章----欢迎来到JS的世界

目录 一.JavaScript的背景 二.JavaScript的书写形式 1.行内式 2.嵌入式 3.外部式 三.JS中的变量 1.变量的定义 2.JS动态类型变量 2.1强类型和弱类型 3.JS中的变量类型 四.运算符 五.if语句和三元表达式和Switch语句和循环语句 六.数组 1.创建获取数组元素 2.新增…

2.20数据结构与算法学习日记(二叉树第一部分)

1.树的表示 typedef int DadaType; struct Node{struct Node* firstChild;struct Node* pnextBrotherDataType data; };//树的表示 2.二叉树的简介 二叉树是一种树形数据结构&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树具有以下特…

现有的通用模型中融入少量中文数据没有太大意义少量的数据就能影响整个大模型

相关链接&#xff1a;只修改一个关键参数&#xff0c;就会毁了整个百亿参数大模型&#xff1f; | 新程序员-CSDN博客 现象 1&#xff1a;mBERT 模型的跨语言迁移 现象 2&#xff1a;大语言模型同样存在显著的语言对齐 现象 3&#xff1a;知识与语言分离 现象 4&#xff1a;…

unity学习(28)——登录功能

有之前注册的知识&#xff0c;登录就很容易处理了。 登陆成功返回id&#xff1a; 登录失败返回null&#xff1a; 测试同一账号不能重复登陆&#xff01;登录成功后最好可以跳到新的场景中 结果是好的&#xff0c;去服务器看一下对应部分的代码&#xff0c;可见&#xff0c;登…

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

项目场景 有时候&#xff0c;遇到数据库重复数据&#xff0c;需要将数据进行分组&#xff0c;并取出其中一条来展示&#xff0c;这时就需要用到group by语句。 但是&#xff0c;如果mysql是高版本&#xff0c;当执行group by时&#xff0c;select的字段不属于group by的字段的…

【FastAPI】P3 请求与响应

目录 请求路径参数查询参数 响应JSON 响应文本响应返回 Pydantic 模型 在网络通讯中&#xff0c;请求&#xff08;Request&#xff09; 与 响应&#xff08;Response&#xff09; 扮演着至关重要的角色&#xff0c;它们构成了客户端与服务器间互动的根本理念。 请求&#xff0…