当前位置: 首页 > wzjs >正文

网站正在备案中百度一下你就知道官网新闻

网站正在备案中,百度一下你就知道官网新闻,合肥有什么好的网站建设公司好,能发朋友圈的网站建设广告语文章目录 引言标准输入输出对象的使用说明: 缺省参数缺省参数分类全缺省参数半缺省参数注意: 总结 引言 通过00【C 入门基础】前言得知,C是为了解决C语言在面对大型项目的局限而诞生: C语言面对的现实工程问题(复杂性…

文章目录

  • 引言
  • 标准输入输出对象的使用
    • 说明:
  • 缺省参数
    • 缺省参数分类
      • 全缺省参数
      • 半缺省参数
      • 注意:
  • 总结


引言

通过00【C++ 入门基础】前言得知,C++是为了解决C语言在面对大型项目的局限而诞生:

C语言面对的现实工程问题(复杂性、可维护性、可扩展性、安全性)

A. 我们使用C语言的输入输出(printf/scanf)的时候:

  1. 需要自己手动匹配类型,如果类型错误,运行崩溃!(类型不安全
  2. scanf易引发缓冲区溢出“char s[10]; scanf(“%s”, s);”。(内存不安全
  3. 我们自定义的一个结构体,不可以通过printf/scanf打印!(不可扩展

C++的解决方法,就是通过面向对象的方式,将输入和输出都封装成类(istream/ostream),并在我们库中,定义出全局的标准输入输出对象(cin/cout)

我们现在无需知道类是什么,也无需知道C++的cin/cout如何解决问题的,我们只需要记住:

  1. cin/cout这两个“关键字”,确实解决了以上C语言的问题(方便复习时串联思路)。
  2. cin/cout如何使用(先会用起来)。

B. C语言中当函数需要不同参数组合,必须创建多个名称不同但功能相似的函数:

体现了函数灵活性不足和代码冗余

// C语言处理不同参数组合
void print_int(int value);
void print_int_color(int value, int color);
void print_int_color_precision(int value, int color, int precision);// 调用时选择特定函数,
print_int(10);
print_int_color(10, RED);
print_int_color_precision(10, RED, 2);

C++用缺省参数解决这个问题。


标准输入输出对象的使用

我们的cin、cout,其实就是我们库中的一个变量,包含在我们头文件iostream中,而库中的定义实现都是被std命名空间封装好的,所以我们使用时,需要包含头文件iostream,并用命名空间使用方法,去使用它们。

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{int a;cin >> a;           //屏幕中输入一个数字,这个数据就会从标准输入流,“流”入变量a.cout<< a <<endl;    //数据a从标准输出流,“流”出到屏幕cout<< a << a << a << a;  //如果有多个数据包输出到屏幕的话,可以使用流运算继续在后面跟。return 0;
}

说明:

  1. 我们的cin、cout,称为标准输入输出流,“标准”的意思,就是默认面向键盘和屏幕的输入输出,也就是说我们的输入和输出都是从键盘获取和向屏幕打印的;而“流”是一种抽象概念,表示连续流动的数据序列,我们可以将数据想象成“水流”。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出(就是C语言的‘\n’),他们都包含在包含< iostream >头
    文件中。
  3. <<是流插入运算符,>>是流提取运算符,它们像是指引“水流”方向的指示牌,如果你想要变量数据流向标准输出(流向屏幕):cout << a;;如果你想数据从标准输入(从键盘)流向变量:cin >> a;
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样手动控制变量的格式。C++的输入输出可以自动识别变量类型(其实后续我们知道都是提前一个个去匹配的)。
  5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识后续才会学习,所以这里只是简单学习他们的使用。后面我们还有有一个章节更深入的学习IO流用法及原理。
    标准输入输出流的大概流程

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

缺省参数

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

缺省参数分类

缺省参数根据我们给于的缺省值个数,分为:

  1. 全缺省(即函数所有的参数都给上缺省值,调用该函数甚至可以一个参数都不传);
  2. 半缺省(即只给了一部分参数缺省值,那么调用函数时就必须传入没有缺省值的参数。)

全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
//调用函数:
Func();
Func(0);
Func(0,1);
Func(0,1,2);
//因为函数的所有参数都有缺省值,所以以上四种传参都可以正确调用函数。

半缺省参数

void Func(int a, int b = 10, int c = 20)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
//调用函数:
Func(0);
Func(0,1);
Func(0,1,2);
//因为函数的第一个参数没有给缺省,所以第一个参数不可以省略,只有以上三种传参可以正确调用函数。

相信我们也发现了,我们调用带缺省值的函数时,好像省略的都是参数中的尾部,这当然是因为我们的缺省值在函数定义时是从右向左给的。难道不可以只把缺省值给左边几个参数,比如:Func(int a, int b = 10, int c );,然后我们调用时就不传前面几个参数吗? 不可以。

声明本质是一种承诺,你没有承诺缺省值,我调用时又不主动传参,就会报错。

注意:

A. 半缺省参数必须从右往左依次来给出

因为要避免歧义:

//后面我们知道C++是允许同名函数的。
// 假如允许任意位置缺省
void Func(int a = 10, int b, int c = 20); // 非法!但假设允许Func(, 5); // 试图让 a=10, b=5, c=20:语法非法
Func(5);    // 歧义:b 未指定,且不能判断 5 是给 a 还是 b?

还有一些其他更深层的原因有关(如:参数压栈顺序、和函数指针保持一致性设计、内存布局硬性要求等),不过多阐述。

B. 缺省参数不能在函数声明和定义中同时出现
虽然声明和定义两边都可以指定缺省参数,但是我们不允许两边都加,因为要避免声明和定义的缺省参数给的值不同,而导致的问题:

//a.h
void Func(int a = 10);
// a.cpp
void Func(int a = 10)
{}// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
//test.cpp
int main()
{//调用函数:Func();  //报错:“Func”: 重定义默认参数 : 参数 1
}

C. 缺省值必须是常量或者全局变量
D. C语言不支持加缺省参数(编译器不支持)

总结

  1. 标准输入输出是为了解决C语言类型不安全、内存不安全、不可扩展等问题。
  2. 标准输入输出其实就是类的对象(类是啥后面说)。
  3. 缺省参数是C++为了解决C语言中函数灵活性不足和代码冗余问题。
  4. 缺省参数只能从右向左给,且值只能给常量或者全局变量。

本文章为作者的笔记和心得记录,顺便进行知识分享,有任何错误请评论指点:)。

http://www.dtcms.com/wzjs/424810.html

相关文章:

  • 网站虚拟空间购买windows优化大师使用方法
  • 企业购物网站开发淘宝客怎么做推广
  • 网站的关于页面网站建设开发外包公司
  • 给别人做网站去掉版权东莞疫情最新通知
  • 重庆网站公司建设网站注册流程
  • 濮阳建设银行官方网站seo是什么味
  • 网站内容更新外包软文代写文案
  • 用爱站工具包如何做网站地图网络服务平台
  • 接私活做网站网络培训学校
  • 诸暨哪些公司可以制作网站seo观察网
  • 哈尔滨精致网站建设搜狗seo查询
  • 香港服务器网站推广厦门人才网官网招聘信息网
  • 家政网站怎么做关键词英文
  • 网站建设公司哪个好呀net网站建设长尾关键词挖掘熊猫
  • 企业网站分为哪三种类型百度查关键词显示排名
  • 商城网站建设哪家好网络营销方法
  • 厦门做网站的公司谷歌官方网站
  • 网站建设实训不足上海搜索引擎优化seo
  • 临沂营销型网站建设全国疫情排行榜
  • 温州建设集团网站互联网公司网站模板
  • 网站建设中 html5 模板黄冈黄页88网黄冈房产估价
  • 郑州网站建设索q479185700如何做营销推广
  • 网站三大标签设置长春今日头条新闻
  • 偃师做网站移动端优化
  • 做app和做网站相同和区别seo编辑是干什么的
  • 网站开发建设收费标准怎么样做一个自己的网站
  • php服装商城网站建设济南seo优化公司助力排名
  • 郑州做网站云极网络营销有哪些形式
  • 成都网站建设四川冠辰windows优化大师怎么下载
  • 东莞网站建设招聘唐山seo