[C转C++之路]初识cin与cout和缺省参数

1,348 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

前言

        本文系[C转C++之路]专栏的第二篇文章,初步介绍C++关于cin和cout的输入与输出,以及缺省参数相关内容。

        本文就来分享一波作者的学习心得与见解。

        笔者水平有限,难免存在纰漏,欢迎指正交流。

C++的输入与输出(初步)

初步认识

       相信大部分人在初学编程语言的时候都试过向世界问好:hello world,那C++中怎么向世界问好呢?

 #include<iostream>//输入输出需要包含这个头文件
 using namespace std;// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
 ​
 int main()
 {
     cout << "Hello world!!!" << endl;
     return 0;
 }

       是不是感觉和C很不一样?这个cout是输出函数吗?<<不是位运算符吗?endl又是什么呢?相信你此刻一定有着诸多困惑与好奇,只不过目前来看无法完全解答你的问题,一些问题我们在后面的学习中再一点一点解答,我们当前只需要先明白这些事:

  1. 使用cout(console out)标准输出对象(控制台)和cin(console in)标准输入对象(键盘)时,必须包含< iostream>头文件以及指定命名空间std。

  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出(相当于'\n'),他们都包含在包含< iostream>头文件中,指定的命名空间为std。

  3. <<是流插入运算符,>>是流提取运算符。

  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式,C++的输入输出可以自动识别变量类型,输出时自动把非字符串类型转换成字符串,输入时自动把字符串类型转换成变量对应类型。

  5. 实际上cout和cin分别是ostream和istream类的对象,>>和<<也涉及运算符重载等知识,这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还会更深入地学习IO流用法及原理。

注意

       早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h。旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用< iostream >+std的方式 。而C的头文件在C++也转换成了加前缀c而没有拓展名了,如<cmath>

       关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等等。只不过C++兼容C语言的用法(可以使用格式化输入输出函数scanf和printf),而这些又用得不是很多,我们这里就不展开学习了。

实例讲解

       我们先来形象地理解一下cout和cin,cout原名console out意为控制台输出,cin原名console in意为控制台输入。cin对应流提取运算符>>,可以理解为输入到控制台的内容像水流似的“流”入指定的变量空间;cout对应流插入运算符<<,可以理解为变量或常量空间的内容像水流似的“流”出到控制台再输出。

image-20220916102132764

       一个<<或>>对应一个元素,可以一次输入或输出多个数据,endl和'\n'效果一样。

       如果要输出字符串和值交替出现的话用cout就不太方便了,看起来也不直观。

 int main()
 {
     int a = 5;
     int b = 10;
     int c;
     int d;
 
     cin >> c >> d;
     cout << "The value of a is " << a << '\n' << "The value of b is " << b << endl;
 
     return 0;
 }

       由于C++兼容C,这种情况下可以使用printf。所以要使用哪一个函数完全由个人需求决定,可以cin、cout和scanf。printf兼用,不同场景下选择最顺手的就行。

 int main()
 {
     int a = 5;
     int b = 10;
     int c;
     int d;
 
     cin >> c >> d;
     printf("The value of a is %d\nThe value of b is %d\n", a, b);
 
     return 0;
 }

缺省参数

缺省参数概念

       缺省参数是声明或定义函数时为函数的参数指定一个缺省值(也叫默认值)。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

 void Func1(int a)//若不传参会报错,必须传参
 {
     cout << a << endl;
 }
 
 void Func2(int a = 0)//可传参也可不传参
 {
     cout << a << endl;
 }
 
 int main()
 {
     Func2(); // 没有传参时,使用行参的默认值
     Func2(10); // 传参时,使用指定的实参
     return 0;
 }

缺省参数分类

全缺省参数

函数形参全部设置为缺省参数.

 void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }
 ​
 int main()
 {
     Func(1, 2);
     return 0;
 }

       要注意传参顺序是从左向右连续,就比如上面代码,只传了1、2,分别传给了a和b,不能发生跳跃传给c。

半缺省参数

部分参数是缺省参数。

 void Func(int a, int b = 10, int c = 20)
 {
     cout << "a = " << a << endl;
     cout << "b = " << b << endl;
     cout << "c = " << c << endl;
 }

       半缺省参数必须从右往左连续缺省,不能间隔着给,就比如不可以void Func(int a, int b = 10, int c)

缺省参数特点

  1. 缺省参数不能在函数声明和定义中同时出现(多文件时只能在头文件的声明中出现)

    原因:让声明与定义位置同时出现,若恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。

  2. 缺省值必须是常量或者全局变量

  3. C语言不支持(编译器不支持)


以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~

src=http___c-ssl.duitang.com_uploads_item_201708_07_20170807082850_kGsQF.thumb.400_0.gif&refer=http___c-ssl.duitang.gif