从这一篇章开始就进入C++了,这是一门建立在C之上的语言,也广泛应用在以后的工作之中,所以我们应该努力吃透这门语言。
命名空间
众所周知,我们的C语言也有很多缺陷,相对于程序员来说有很多不太方便使用的地方的,例如命名冲突,我们看下图就知道了,
这是加了#include<stdlib.h>和没加的区别,我们所以说C语言是有命名冲突的,但是c++就可以很好的解决这个问题,应为c++里面有命名空间。
命名空间本质就是一个域,而这个域呢和全局域是各自独立,互不干扰的,我们可以在不同的域中定义同名的变量,而创建一个命名空间就需要namespace,使用域里面的变量就是使用两个冒号,具体的使用方法见下面的代码。使用命名空间的时候就是 命名空间名::变量 ,这样的格式
如果是使用全局域里面的变量就是 ::变量名 ,就是上面的代码表达的那样。
命名空间的嵌套使用
命名空间也是可以嵌套的,我们看一下代码就明白了。
就是上图所示这样,还是很好理解的吧。
命名空间的结构体和函数用法
命名空间可以是变量,也可以是结构体和函数,都可以。我们看一下代码就能明白用法了。
命名空间的使用方法
命名空间有三种使用方法,第一种指定命名空间,就是我们上面讲的那一种,这种方法在大项目里面比较推荐使用,不会出错;
第二种就是展开命名空间,直接全部展开,这样也很好,但是在大项目里面不推荐,这样的只适合我们平时做练习的时候用,效率太低。写法:using namespace gyc;
第三种是展开某个成员,这种是上面两种方法折中的办法,我们只展开命名空间中的某个成员,写法:using gyc ::a。
C++的输入和输出
和通常的语言一样的,都要有输入和输出,我们下面来讲讲C++的输入和输出吧。
首先,C++的输入和输出必须要包含一个头文件,<iostream> ;并且我们还要展开一下标准文件,就是using namespace std.
输出
cout是输出,我们看代码就知道怎么用了。
就是将要输出的指向cout,endl相当于C语言中的换行。
输入
这就是C++的输入和输出,应该还是很好理解的。
提一个很细节的点,C++的精度是小数点后五位。
再IO需求较高的地方,如部分大量输入的竞赛题中,假如下面三行代码,可以大大提高效率。
缺省参数
缺省参数又叫默认参数,我们可以理解为默认值,就是在定义函数时,给他的参数设置一个默认值,使用时如果给了这个参数的值,那么就使用给的那个值,如果没给,那就使用默认值,我们看一下代码。
但是我们这个缺省是没有空的,不能为空的。
全缺省
全缺省就是函数里面的所有参数都给了默认值,例如
半缺省
半缺省是有些给了有些没给,但是也不能连来的,也是有规矩的,给缺省值只能从右往左给,而且必须是连续的。
这些函数传参的顺序必须从左往右的。
函数声明和定义分离是,我们必须将缺省给声明。
函数重载
众所周知,C语言中是不允许出现重名的函数的,我们C++的祖师爷就觉得很烦,为什么不能重名,大家想象一下,我们在工作时,和同事的代码要合并在一起的时候,突然发现函数重名了,代码量又很大的时候,到底谁改,那我们就必须上班都带个武器,看谁打的赢谁,这样就能解决这个问题了吗。所以,使用C的缺陷就体现出来了,但是祖师爷想彻底解决这个问题,就自己写了一个函数重载,那到底什么是函数重载呢?
函数重载就是在同一作用域里C++允许函数重名的情况出现,但是要求参数不同,C++可以自动识别参数类型。
就是上图所示,函数重载就是这样用的。
注意:函数返回值不同,参数相同,不构成函数重载。
引用
引用就是取别名,取别名就是给这个变量一个别的名字,但是还是他本身。例如
b和c就是a的别名,而且b和c的本质就是a,b和c的改变也会引起a的改变。而且也可以给别名取别名,
那么,我们引用的意义是什么呢?就是我们祖师爷看不惯C的指针,觉得太麻烦了,所以就创造了引用,大家看我下面的代码就知道引用有多方便了。
我们取的别名是不是就比指针好用多了,但是大家不要认为引用可以取代指针,我们在C++里面还是时常用到指针,还是不能完全取代,但是C++里面两个都会用到。
引用的特性
• 引⽤在定义时必须初始化
• ⼀个变量可以有多个引⽤
• 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体
const引用
可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访 问权限在引⽤过程中可以缩⼩,但是不能放⼤。
所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。