输入输出流

1.输入输出流

输入/输出流类:iostream---------i  input(输入)    o output(输出)   stream:流

iostream:

istream类:输入流类-------------cin:输入流类的对象

ostream类:输出流类------------cout:输出流类的对象

1.1 输入流 istream

1.1.1 基本认识

数据是从键盘或显示器流向输入缓冲区中,最后刷新了再流向内存

istream实例化了cin对象  ,  重载了运算符:>>

输入格式:cin>>变量1;cin>>变量1>>变量2>>变量3.........;原型:istream &cin >>基本的数据类型;istream &cin >>int;istream &cin >>char;.......

1.1.2 重点 

如果需要一次性输入多个数据,那么多个数据需要用空格进行间隔,另外需要输入回车,把输入的内容刷新到内存中

1.1.3 举例

iostream.cpp
// 输入流
int main()
{int number;int number2;cout << "请输入两个数字" << endl;cin >> number >> number2;cout << "number=" <<number<<"  number2"<<number2 << endl;return 0;
}

1.2 输出流 ostream

数据是从内存流向输出缓冲区刷新时再从输出缓冲区流向终端或显示器

缓冲区的大小:

#define  BUFSIZ   512个字节

查看缓冲区大小

iostream.cpp

#include "iostream"
using namespace std;int main()
{cout << "缓冲区大小:" << BUFSIZ << endl;//查看缓冲区大小return 0;
}

1.2.1 基本认识

ostream实例化了cout对象、cerr对象(发生一些错误就会调用cerr输出错误信息)、clog对象(输出一些日志信息)

重载了运算符:<<

输出格式:cout<<数据1;cout<<数据1<<数据2<<数据3,........;

原型

ostream类中:ostream &  operator  <<(int)//重载int类型{ostream cout;.....return  cout;}ostream &  operator  <<(char)//重载char类型{}

ostream  &cout  <<  基本的数据类型;

ostream  &cout  <<  int ;

ostream  &cout  << char;

ostream  &cout  << unsigned int;

ostream  &cout  << char *;

ostream  &cout  << const char *;

ostream  &cout  << float;

.........

举例采用格式化输出

C语言的格式化输出也支持:\n、\r、.......

十进制形式输出:<iomanip>

dec:十进制

oct:八进制

hex:十六进制

....

iostream.cpp

#include "iostream"
using namespace std;//输出流
int main()
{cout << "缓冲区大小:" << BUFSIZ << endl;//查看缓冲区大小cerr << "hello world" << endl;cout << "\n" << endl;cout << dec << 17 << endl;cout << oct << 17 << endl;cout << hex << 17 << endl;clog << "你好,世界" << endl;cout << "hello" << 10 << 10.5 << 'a' << endl;return 0;
}

1.2.2 使输出流重载我们的字节定义的类型people试试

 iostream.cpp
// 使输出流重载我们的字节定义的类型people试试
class People {
public:People(int a, char b, double c){this->a = a;this->b = b;this->c = c;}int a;char b;double c;
};//重载输出流运算符  <<  ,使他可以输出我们自定义类型
void operator <<(ostream& out, People& people)
{out << people.a << endl;out << people.b << endl;out << people.c << endl;}int main()
{//实例化对象People people(10, 'v', 50.4);//输出(在我们没有重载前是不能输出people类型的)cout << people;return 0;
}

// 使输出流重载我们的字节定义的类型people试试
class People {
public:People(int a, char b, double c){this->= a;this->= b;this->= c;}int a;char b;double c;
};//重载输出流运算符  <<  ,使他可以输出我们自定义类型
void operator <<(ostream& out, People& people)
{
	out << people.<< endl;
	out << people.<< endl;
	out << people.<< endl;}int main()
{//实例化对象
	People people(10, 'v', 50.4);//输出(在我们没有重载前是不能输出people类型的)
	cout << people;return 0;
}

1.2.3 重点:

1)当输出遇到endl时,会刷新输出缓冲区

2)当流对象使用完或超出作用域时,也会刷新输出缓冲区

3)当输出缓冲区装满时,也会刷新一次缓冲区

1.3 总结

#include <iostream>  
#include<string>  
#include <iomanip> //不要忘记包含此头文件  
using namespace std;  
int main()  {   int a;  cout<<"input a:";  cin>>a;  cout<<"dec:"<<dec<<a<<endl; //以上进制形式输出整数  cout<<"hex:"<<hex<<a<<endl; //以十六进制形式输出整数a  cout<<"oct:"<<setbase(8)<<a<<endl;//以八进制形式输出整数a  string pt= "China";         //pt指向字符串”China”  cout<<setw(10)<<pt<<endl; //指定域宽为10,输出字符串  cout<<setfill('*')<<setw(10)<<pt<<endl;//指定域宽10,输出字符串,空白处以“*”填充  double pi=22.0/7.0; //计算pi值  cout<<setiosflags(ios::scientific)<<setprecision(8);//按指数形式输出,8位小数  cout<<"pi="<<pi<<endl; //输出pi值  cout<<"pi="<<setprecision(4)<<pi<<endl;//改为4位小数  cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;//改为小数形式输出,精度为4   cout<<"pi="<<fixed<<pi<<endl;//fixed确定小数点后精度为4   cout.setf(ios::showbase); //设置输出时的基数符号  cout<<"dec:"<<a<<endl; //默认以十进制形式输出a  cout.unsetf(ios::dec); //终止十进制的格式设置  cout.setf(ios::hex); //设置以十六进制输出的状态  cout<<"hex:"<<a<<endl; //以十六进制形式输出a  cout.unsetf(ios::hex); //终止十六进制的格式设置  cout.setf(ios::oct); //设置以八进制输出的状态  cout<<"oct:"<<a<<endl; //以八进制形式输出a  cout.unsetf(ios::oct); //终止以八进制的输出格式设置  char *pt="China"; //pt指向字符串”china”  cout.width(10); //指定域宽为10  cout<<pt<<endl; //输出字符串  cout.width(10); //指定域宽为10  cout.fill('*'); //指定空白处以'*'填充  cout<<pt<<endl; //输出字符串  double pi=22.0/7.0; //计算pi值  cout.setf(ios::scientific);//指定用科学记数法输出  cout<<"pi="; //输出"pi="  cout.width(14); //指定域宽为14  cout<<pi<<endl; //输出"pi值  cout.unsetf(ios::scientific); //终止科学记数法状态  cout.setf(ios::fixed); //指定用定点形式输出  cout.width(12); //指定域宽为12  cout.setf(ios::showpos); //在输出正数时显示“+”号  cout.setf(ios::internal); //数符出现在左侧  cout.precision(6); //保留6位小数  cout<<pi<<endl; //输出pi,注意数符“+”的位置  return 0;   
}  
运行结果如下:   
inputa:34 (输入a的值)   
dec:34 (十进制形式)   
hex:22 (十六进制形)   
oct:42 (八进制形式)   
China (域宽为10)   
***** China (域宽为10,空白处以'*'填充)   
pi=3.14285714e+00 (指数形式输出,8位小数)   
pi=3.1429e+00) (指数形式输小,4位小数)   
pi=3.143 (小数形式输出,精度仍为4)   
pi=3.1429(fixed确定小数点后精度为4 )dec:21 (十进制形式)hex:Oxl5 (十六进制形式,以0x开头)oct:025 (八进制形式,以O开头)China (域宽为10)*****china (域宽为10,空白处以'*'填充)pi=**3.142857e+00 (指数形式输出,域宽14,默认6位小数)****3.142857 (小数形式输㈩,精度为6,最左侧输出数符“+”)

2. 请阐述重载、重写、覆盖/隐藏的区别是什么?

(1)函数重载(Overloading):

定义: 函数重载是指在同一个作用域内,定义多个具有相同名称但参数列表不同的函数。

条件: 函数名相同,但参数的类型、个数或顺序不同。

作用: 提供了更灵活的函数调用方式,根据参数的不同选择调用不同版本的函数。

int add(int a, int b);
double add(double a, double b);

(2)函数重写(Overriding):

定义: 函数重写是指在派生类中重新定义基类中已经存在的虚函数。

条件: 基类中的函数必须是虚函数,派生类中的函数要有相同的函数签名(函数名、参数类型和返回类型必须保持一致)。

作用: 允许派生类提供特定于派生类的实现,实现多态。

class Base {
public:virtual void display() const;
};class Derived : public Base {
public:void display() const override;
};

3成员隐藏/覆盖(Member Hiding/Overriding):

定义: 当派生类中的函数屏蔽了基类中的同名函数时,称为成员隐藏或覆盖。

条件: 派生类中的函数与基类中的函数同名,但参数列表可以不同。(说人话就是,只要子类的函数与父类的函数有同名的,即使只要函数名相同,调用这个函数就是调用子类的)

作用: 防止基类的同名函数被派生类继承,如果没有使用 using 关键字,基类的同名函数在派生类中会被隐藏。

class Base {
public:void display() const;
};class Derived : public Base {
public:void display(int x) const;  // 隐藏了基类中的 display 函数
};

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

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

相关文章

使用Tensorboard可视化网络结构(基于pytorch)

前言 我们在搭建网络模型的时候&#xff0c;通常希望可以对自己搭建好的网络模型有一个比较好的直观感受&#xff0c;从而更好地了解网络模型的结构&#xff0c;Tensorboard工具的使用就给我们提供了方便的途径 Tensorboard概况 Tensorboard是由Google公司开源的一款可视化工…

【大模型+编程助手】国内编程助手安装与使用(CodeGeeX,Baidu Comate)

百度 Comate (可试用)&#xff1a;https://comate.baidu.com/ 清华CodeGeeX &#xff08;开源&#xff0c;暂时免费&#xff09;&#xff1a;https://codegeex.cn/ 华为&#xff1a;https://devcloud.cn-north-4.huaweicloud.com/codeartside/home?productsnap# 开发平台VScod…

贪吃蛇C语言实现(有源码)

前言 之前学了一点easyx图形库的使用&#xff0c;掌握一些基本用法后就用贪吃蛇来进行实战了&#xff0c;运行视频放在csdn视频那一栏了&#xff0c;之前的烟花也是。 1.头文件 #define _CRT_SECURE_NO_WARNINGS 1 #include<easyx.h> #include<conio.h> #includ…

【Vue2+3入门到实战】(21)认识Vue3、使用create-vue搭建Vue3项目、熟悉项目和关键文件

目录 一、认识Vue31. Vue2 选项式 API vs Vue3 组合式API2. Vue3的优势 二、 使用create-vue搭建Vue3项目1. 认识create-vue2. 使用create-vue创建项目 三、 熟悉项目和关键文件四、总结 一、认识Vue3 1. Vue2 选项式 API vs Vue3 组合式API <script> export default {…

力扣题:高精度运算-1.2

力扣题-1.2 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;415. 字符串相加 解题思想&#xff1a;从后往前遍历两个字符串,然后进行相加即可 class Solution(object):def addStrings(self, num1, num2):""":type num1: str:type …

Navicat 技术干货 | 如何查看关系型数据库(MySQL、PostgreSQL、SQL Server、 Oracle)查询的运行时间

在数据库优化中&#xff0c;理解和监控查询运行时间是至关重要的。无论你是数据库管理员、开发人员或是参与性能调优的人员&#xff0c;知道如何查看查询运行时间能为你的数据库操作提供有价值的参考。本文中&#xff0c;我们将探索几款热门的关系数据库&#xff08;如 MySQL、…

ubuntu下快速安装使用docker

一、ubuntu下安装docker 1、命令行终端内直接输入docker 可以看到安装docker的命令提示 2、安装需要注意的几个点 (1)需要管理员权限 (2)更新软件源后再进行安装 命令行输入命令 sudo apt-get update #更新软件源 sudo apt install docker.io #安装docker 如图所示 二…

PostgreSQL荣获DB-Engines 2023年度数据库

数据库流行度排名网站 DB-Engines 2024 年 1 月 2 日发布文章宣称&#xff0c;PostgreSQL 荣获 2023 年度数据库管理系统称号。 PostgreSQL 在过去一年中获得了比其他 417 个产品更多的流行度增长&#xff0c;因此获得了 2023 年度 DBMS。 DB-Engines 通过计算每种数据库 2024 …

性能优化-OpenMP基础教程(一)

本文主要介绍OpenMP并行编程技术&#xff0c;编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&am…

Mysql count统计去重的数据

不去重&#xff0c;是4 &#xff1a; SELECT COUNT(NAME) FROM test2 明显里面包含了2个 name 等于 mike的数据&#xff0c; 所以需要做去重 &#xff1a; 通过结合 count 函数和 DISTINCT 关键字 SELECT COUNT(DISTINCT NAME) FROM test2 好了就到这。

消息中间件 —— ActiveMQ 使用及原理详解

目录 一. 前言 二. JMS 规范 2.1. 基本概念 2.2. JMS 体系结构 三. ActiveMQ 使用 3.1. ActiveMQ Classic 和 ActiveMQ Artemis 3.2. Queue 模式&#xff08;P2P&#xff09; 3.3. Topic 模式&#xff08;Pub/Sub&#xff09; 3.4. 持久订阅 3.5. 消息传递的可靠性 …

数模学习day06-主成分分析

主成分分析(Principal Component Analysis,PCA)主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。一般来说当研究的问题涉及到…

当hashCode相同时,equals是否也相同?

在Java中&#xff0c;理解对象的这两个基本方法—hashCode和equals对于编码是至关重要的&#xff0c;尤其是在处理集合类如HashMap和HashSet时。然而&#xff0c;一个常见的误解是&#xff0c;如果两个对象有相同的哈希码&#xff08;hashCode&#xff09;&#xff0c;那么它们…

iec104和iec61850

iec104和iec61850 IEC104 规约详细解读(一) 协议结构 IEC104 规约详细解读(二)交互流程以及协议解析 61850开发知识总结与分享【1】 Get the necesarry projects next to each other in the same directory; $ git clone https://github.com/robidev/iec61850_open_server.g…

ES(Elasticsearch)的基本使用

一、常见的NoSQL解决方案 1、redis Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库&#xff0c;重点关注数据存储格式&#xff0c;是key-value格式&#xff0c;也就是键值对的存储形式。与MySQL数据库不同&#xff0…

DNS安全与访问控制

一、DNS安全 1、DNSSEC原理 DNSSEC依靠数字签名保证DNS应答报文的真实性和完整性。权威域名服务器用自己的私有密钥对资源记录&#xff08;Resource Record, RR&#xff09;进行签名&#xff0c;解析服务器用权威服务器的公开密钥对收到的应答信息进行验证。如果验证失败&…

数字信号处理期末复习——计算小题(二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

图像清晰度评估指标

图像清晰度评估涉及多个指标&#xff0c;这些指标可用于定量测量图像的清晰度和质量。 以下是一些常见的图像清晰度评估指标&#xff1a; 均方根误差&#xff08;Root Mean Square Error&#xff0c;RMSE&#xff09;&#xff1a; 通过计算原始图像和处理后图像之间的像素差异的…

【实用工具】Gradio快速部署深度学习应用1:图像分类

前言 在AI快速发展的今天&#xff0c;我们作为算法开发人员&#xff0c;也应该有一些趁手的工具帮助我们快速开发并验证自己的想法&#xff0c;Gradio可以实现快速搭建和共享的功能&#xff0c;能够展示出一个前端界面&#xff0c;把我们的算法包裹起来&#xff0c;快速验证算…

DNS主从服务器、转发(缓存)服务器

一、主从服务器 1、基本含义 DNS辅助服务器是一种容错设计&#xff0c;考虑的是一旦DNS主服务器出现故障或因负载太重无法及时响应客户机请求&#xff0c;辅助服务器将挺身而出为主服务器排忧解难。辅助服务器的区域数据都是从主服务器复制而来&#xff0c;因此辅助服务器的数…