C++入门------输入输出、缺省参数
一、C++标准库------命名空间 std
C++标准库std是一个命名空间,全称为"standard",其中包括标准模板库(STL),输入输出系统,文件系统库,智能指针与内存管理,字符串与文本处理等等,我们以输入输出流和标准模板库为例,简单地认识一下C++标准库里面有哪些内容:
1.输入输出系统
(1)流(Streams)
- 基础流:
iostream
(cin
,cout
,cerr
) - 文件流:
fstream
,ifstream
,ofstream
- 字符串流:
stringstream
,用于内存数据格式化
(2)格式化工具
std::format
(C++20):类型安全字符串格式化- 本地化支持:
locale
与wcout
(宽字符输出)
2.标准模板库(STL)
(1) 容器(Containers)
- 序列容器:
vector
,list
,deque
,array
(C++11) - 关联容器:
map
,set
,unordered_map
(C++11),unordered_set
(C++11) - 适配器:
stack
,queue
,priority_queue
(2) 算法(Algorithms)
- 非修改序列操作:
find
,count
,for_each
- 修改序列操作:
copy
,transform
,replace
- 排序与搜索:
sort
,binary_search
,lower_bound
(3) 迭代器(Iterators)
- 五类迭代器:输入/输出、前向/双向/随机访问
- 范围遍历:C++20引入
ranges::
简化迭代操作
在本期内容中,我们只需要认识一下输入输出流中iostream的cin,cout,完成一些简单的输入输出操作即可。
二、输入输出------cin / cout
我们先来看这样一段代码:
1.#include < iostream >
C++的输入输出需要包含头文件< iostream > ,并且展开命名空间std(C++标准库),刚才上面的内容中,我们已经介绍了cin/cout是包含在头文件< iostream >中,而< iostream >又包含在命名空间std中,在上期内容的讲解中,我们知道,想要使用命名空间里的内容,就需要展开命名空间或者指定访问命名空间。在这里,由于是平时学习的代码,内容不是很多,所以我们就直接展开命名空间,写起来比较方便,如果不展开命名空间,输入的内容就要就相对多一些,如图所示:
- 使用域作用限定符指定访问命名空间中的内容:
- 使用using将命名空间的cout、endl成员引入:
我们来看下面一段代码:
要注意的是,展开命名空间要写在头文件之后,这是规范的写法,符合顺序逻辑,也就是编译器的解析流程,这里不过多赘述。
2.cout与cin
(1)cout------标准输出流
-
基础输出语法:
cppcout << "Hello World"; // 输出字符串 cout << 10 << " is the answer"; // 链式输出(拼接不同类型)
-
数据类型支持
cout
通过运算符重载支持所有内置类型:
cpp
int num = 2025;
double pi = 3.1415926;
bool flag = true;
cout << num << endl; // 输出:2025
cout << pi << endl; // 输出:3.14159(默认精度6位)
cout << flag << endl; // 输出:1(true为1,false为0)
在这里,我们就不需要像printf那样使用%d,%f,%lf等来输出对应类型的值了,因为cout可以自行判断。当然,如果需要输出小数点后指定多少位,或者一个数字占多少位,这里就不是那么简单了,在这种情况下,还是使用printf输出比较方便,因为C++是兼容C的。
(2)cin------标准输入流
- 头文件:
#include <iostream>
- 本质:
cin
是std::istream
类的全局实例,绑定标准输入设备(通常为键盘) - 缓冲机制:输入内容暂存于内存缓冲区,按需提取至变量
- 基础数据读取
cpp
int age;
double salary;
cin >> age >> salary; // 输入"30 85000.5"后,age=30, salary=85000.5
- 自动类型转换:将输入字符序列转换为目标类型数据;
- 空格分隔:默认跳过前导空白,以空格/换行为数据分隔符;
- 链式操作:支持连续提取多个变量。
总而言之,cin就相当于C语言中的scanf。
(3)endl------流操纵器
endl
是C++标准库中定义的流操纵器(Manipulator),其行为包含两个不可分割的原子操作:-
- 换行输出:向输出流插入换行符
\n
,使后续输出从新行开始;
- 换行输出:向输出流插入换行符
-
- 强制刷新:调用
flush()
方法,立即将流缓冲区内容写入目标设备(如控制台、文件、网络套接字)。
- 强制刷新:调用
简单来讲,先将endl
理解为'\n'
即可。
3. << 流插入与 >> 流提取
流插入运算符<<
- 流插入运算符
<<
是C++中输出流操作的核心工具,其本质是ostream
类中重载的运算符函数。通过该运算符,数据从内存对象流向输出设备(如控制台、文件、网络套接字)。 - 什么是
控制台
?黑框框就是:
流提取运算符>>
- 流提取运算符
>>
是C++输入流(istream
)的核心操作符,用于从输入源(如键盘、文件、网络)提取数据到变量。其本质是istream
类中重载的运算符函数,遵循链式调用规则。
如图所示:
这里>>
就是将键盘上输入的10提取出来,赋给变量a。
三、缺省参数
1.缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,举个简单的例子:
如图所示,Fun函数中提供了一个缺省参数a=1,也就是说,当我们没有传参的时候,它就会默认调用a=1,输出结果为1;如果传参了,比如这里传了一个10,那么就传什么输出什么。
2.缺省参数的分类
- 全缺省参数
如图所示:
这里在函数定义中,三个参数都是缺省参数,还是这样的原则:没传参就使用缺省参数,如果传参那么就传什么输出什么,并且,这里是有顺序的,Fun(20)就是先把20传给a,b和c使用缺省参数;Fun(20,30)就是先传给a,b,c依然使用缺省参数。 - 半缺省参数
如图所示:
需要注意的是,半缺省参数必须从右往左依次来给出,不能间隔着给,如图:
前一个例子是缺省的两边,中间没有缺省参数;后一个是从左往右安排的缺省参数,这些都是不对的。
本期总结+下期预告
本期内容为大家详细介绍了C++的输入输出和缺省参数,下期内容将为大家带来函数重载和引用相关的知识!
感谢大家的关注,我们下期再见!