高效学习 C++ 基础部分 & 话题挑战赛
@[Toc]
写在前面:话题挑战赛第 1 期
开始入坑 C++了,嗐,说实话细节有好多,怎么说呢,我相信,今天是灰色的,明天是灰色的,后天一定是美好的,加油吧少年们。
在开始之前嘞,先向大家介绍目前官方大力支持的一项活动:话题挑战赛第 1 期
一个人走,可能走的很快,但一群人走,将走的更远,以来路作灯,共同成长,展现技术人风采!
我的话题是:大学学习月/季度总结是呀,大学学习都有哪些收获呢,邀您一同分享,我觉得对于我们学生来说是非常好的,在这里我们可以复盘上个月/季度的学习。模板如下:大学学习月/季度总结
对,其实是非常简单的,如果有兴趣或是有什么问题,欢迎私信我哈。==活动奖品:==话题团队中首次发稿人数达到 40 人+,==团队成员可一起瓜分 2500 元==,活动链接如下:话题挑战赛第1期
一、C++关键字
C++有 63 个关键字,而 C 语言只有 32 个关键字。
这里的话就不详细介绍了,后面会详细讲解。
二、命名空间
在 C++中,变量、函数和类型都是大量存在的。如果全部存在于全局作用域中,可能会导致许多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突和名字污染,namespace 关键字的出现就是针对这种问题的。
例题:
上面的代码是没有问题的,但是加上这个头文件之后程序就挂了。
rand()是一个库函数存在于 stdlib.h 头文件中,而在编译的时候头文件会展开,这时候变量 rand 和库函数 rand 都存在与同一个作用域中(全局作用域)
从上面的错误示范中可以得到,同一个作用域里面不可以出现同名变量,因为会导致命名冲突,在 C 语言中没有很好地解决这个问题,但在 C++中引入 namespace 来解决它,在命名空间中定义变量,函数,类型均可。
那怎么改才是对的呢?
1.命名空间的定义
定义命名空间,需要使用 namespace 关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
普通命名空间的定义
命名空间支持嵌套和重名
注意:
==定义一个命名空间就相当于定义了一个新的作用域==,命名空间中的内容都局限于该命名空间中;
==命名空间不会影响变量的生命周期,而且命名空间的定义只能是全局的,不能在局部中定义==,比如在 main 函数中定义就是错误的,而且一般命名空间是定义在头文件下的。
总结:
命名空间中的内容:可以定义变量、函数,还可以定义类型;
命名空间支持嵌套(防止工程太大导致命名冲突);
同名的命名空间是允许同时存在的,编译器编译时会自动合并。
2.命名空间的使用
==using 的意义:将命名空间中的内容全部或部分放出来。==
命名空间的三种使用方式:
加命名空间名称及作用域限定符
使用 using 将命名空间中成员引入(通常用来放部分常用的)
使用 using namespace 命名空间引入(放了全部)
三、C++输入 &输出
下面看看 C++是如何向世界打招呼的:
说明:
使用 cout 标准输出(控制台)和 cin 标准输入(键盘)时,必须包含<iostream>头文件以及 std 标准命名空间;注意:早期的标准库将所有功能在全局域中实现,声明在.h 后缀的头文件中,后来将其实现在 std 命名空间下,为了和 c 头文件区分也为了正确使用命名空间,规定 C++头文件不带.h
使用 C++输入输出更方便,不需要增加数据格式控制,如 %d, %c 等
四、缺省参数/默认参数
缺省参数可以形象的比作我们生活中的备胎,嗯呢,C++中函数的参数是可以配备胎的,但是注意哦,C 语言不支持缺省参数。
1.缺省参数的定义
缺省参数是声明或定义函数时为函数的参数指定一个默认值。
在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
2.缺省参数分类
I.全缺省参数
全缺省参数指的是全部给了缺省参数/默认参数
II.半缺省参数
半缺省参数指的是部分缺省,注意:半缺省必须是从右往左依次来给出,不能隔着给
比如下面的代码是正确的:
如果是这样给出,是错误的
注意:
缺省参数不能在声明和定义中同时给出,因为如果声明和定义同时给,恰好提供的值又不同,那么编译器就无法确定该用哪个缺省值;
声明给,定义不给 —— 可以;
声明不给,定义给 —— 不可以(编译器编译的时候看函数声明,链接的时候才看函数定义。
==综上,缺省参数是在函数声明的时候给出的,定义的时候不用给。==
那么可能有很多人会问,缺省参数有什么用?
下面给出一个半缺省的例子:
五、函数重载
要求:函数名相同,函数参数不同,指的是参数个数/类型/顺序不同(形参类型顺序),注意哦,不关返回值类型的事哦。
C 语言不支持同名函数,但是 C++支持
比如:
函数重载这部分内容很重要,在面试的时候经常考察,比如下面几道面试题:
下面两个函数能形成重载吗?有什么问题或者在什么情况下会出现问题?
C 语言中为什么不能支持函数重载?
C++中函数重载底层是怎么处理的?
C++中能否将一个函数按照 C 语言的风格来编译?
这些问题在下一篇博文中详细讲解哦,敬请期待吧。
六、遇见安然遇见你,不负代码不负卿
话题挑战赛正式开始啦,期待您的加入,一同瓜分千元奖金!模板:大学学习月/季度总结
版权声明: 本文为 InfoQ 作者【安然无虞】的原创文章。
原文链接:【http://xie.infoq.cn/article/a37e8e29b2335936e7dde6dc2】。文章转载请联系作者。
评论