个人名片:
作者简介:一名乐于分享在学习道路上收获的大二在校生
❄个人主页:GOTXX
个人WeChat:ILXOXVJE
本文由GOTXX原创,首发CSDN
系列专栏:零基础学习C语言----- 数据结构的学习之路
每日一句:如果没有特别幸运,那就请特别努力!
————————————————
文章简介:
本篇文章对 c++入门 的相关知识详细讲解!
如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!
目录
一.命名空间namespace
namespace的用法
命名空间的嵌套
命名空间的展开
C++的输入输出
cout 的用法
cin 的用法
缺省参数
缺省参数的概念:
缺省参数的用法
半缺省参数
函数重载
函数重载的概念
函数重载的例子
为什么C语言不支持函数重载?
引用
引用特征
常引用
引用的作用
1.做参数
2.做函数返回值
传值返回
传引用返回
指针和引用的不同点
内联函数
概念:
内联函数的特性
auto关键字
基于范围的for循环
为了解决命名冲突问题(1.自己写的变量名等与库里面的冲突 2.当自己写的代码与他人的代码结合时,与他人命名的变量名冲突),引入了命名空间这个概念;
用法:
关键字namespace + 命名空间的名字 + {} ({}中即为命名空间的成员)
注意:{}后不加分号;
当命名这样一个命名空间域时;(如上图)
其中:GOTXX 是这个命名空间的名字,{ }里面的是命名空间的成员;
值得注意的是:
namespace 里面不仅可以定义一些变量,还可以定义一些函数,结构体等等
当需要访问该命名空间里面的变量时,需要加 域作用限定符 ::
其中注意 访问结构体时 限定符的位置;
例如:
注意:
1.如果不加 域作用限定符(::)时,默认的是在全局中去找,不会进入到命名空间域中去找;
2.同一个文件或则多个文件的多个位置的同名的命名空间编译器会把他们合成一个命名空间;
例如:在GOTXX1里面嵌套GOTXX2,GOTXX3 ……等等
嵌套后的使用:
展开分为 1.将整个命名空间展开
2.将一个命名空间里面的部分成员展开
用法:
1. using namespace + 需要展开的命名空间的名字
2. using 命名空间的名字 + 域作用限定符 + 需要展开的命名空间的成员的名字
展开后的作用:
即访问该命名空间的成员时,可以不用加域作用限定符(但也可以用);
展开的含义:可以理解为如果把命名空间比作一堵墙,展开即去掉这一堵墙,不需要用域作用限定符去指定;
std :
std是c++的标准库的命名空间,c++将标准库的定义和实现都放在这个空间中,里面包含了许多经常使用的关键词,如果将其全部展开,会很危险,所以可以将经常使用的std里面一些成员部分展开
例如:
与c语言类似,c++使用输入输出时也需要包含头文件;
输入输出流
用法:
关键字cout + << + 需要打印的变量名
cout与C语言种的 printf 有一样的作用;
其中:printf在打印的时候需要指定类型(如%d %c 等等),但是cout可以自动识别类型;
在使用cout的是时候,需要用一个 流插入符号 <<;
因为cout在c++中与C语言中printf一样,需要经常使用,所以可以将其展开,就不用每次都指定命名空间;
如图:
在c++中,换行用 endl,endl 是也是std中的一个关键字,使用时可以将其展开;
也可以使用C语言中 '\n' 进行换行;
如例:
用法:
关键字cin + >> + 需要打印的变量名
cout与C语言种的scanf一样,有输入的作用;
其中:scanf在输入的时候需要指定类型(如%d %c 等等),但是cin可以自动识别类型;
在使用 cin 的是时候,需要用一个 流提取符号 >>;(与cout中流插入<<是反的)
因为cin在c++中也需要经常使用,所以可以将其展开;
如图:
缺省参数是定义或则声明一个函数为函数的参数指定一个缺省值,在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参;
例如:
注意:
半缺省参数只能从右往左一次给出,不能间隔着给,因为这样在传参会有歧义;
缺省参数不能再函数的声明和定义中同时出现,也不能再定义中给,应在声明中给;
(因为在声明和定义中都出现了缺省参数,刚好两个位置提供的值不同,那么编译器无法确定用哪一个缺省值);
缺省参数必须是常量或则全局变量;
c语言不支持缺省参数(编译器不支持);
函数重载:是函数的一种特殊情况,c++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参(参数个数,或则类型,或则顺序)不同,函数返回类型可同可不同,常用来处理实现功能类似数据类型不同的问题;
例如:
因为不同语言的函数名修饰规则不同,C语链接函数地址时,就用函数名去找,在C语言中,函数名就是函数名,没有被修饰,所以当两个函数的函数名相同时就会有歧义;
而在其他的语言中,函数名的修饰可能会与函数的参数等有关,比如linux中的函数名修饰规则是_Z+函数名+参数首字母;这样在链接函数地址时,虽然函数名相同,但是参数等不同,同名函数就不会有歧义;
引用的概念
引用不是定义一个新变量,而是给已经存在的变量取一个别名,编译器不会为引用变量开辟空间空间,它和它引用的变量共用同一块空间;
用法:
类型 + & + 引用变量名 = 引用实体;
例如:
int a = 0;
int& b = a; // b就是对a的引用
b = 10; // b改变,a也改变
1.引用在定义时必须初始化;
2.一个变量可以有多个引用;
3.引用一旦引用一个实体,再不能引用其他实体;
如果引用某个实体,不是想要修改这个它,就可以用常引用,前面加个const
用引用返回的条件:
出了函数作用域,返回值就销毁了,不能用引用返回,否则返回值是不确定的;
即出了函数作用域,返回值没有被销毁,就可以用引用返回;
例如:
1.应用概念上定义一个变量的别名,指针存储的一个变量的地址;
2.引用再定义的时候必须初始化,指针没有要求;
3.引用在初始化的时候引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向一个同类型实体;
4.没有NULL的引用,但有NULL指针;
5.在sizeof中含义不同,引用结果为引用类型的大小,但是指针始终是地址空间所占字节数(4/8字节)
6.引用自加即引用实体增加1,指针自加即指针向后偏移一个类型的大小;
7.有多级指针,但是没有多级引用;
8.访问实体方式不同,指针需要解引用,引用编译器自己处理;
9.引用比指针使用起来更加安全;
以inline修饰的函数叫做内联函数,编译时c++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的消耗,可以提升程序运行的效率;
1.inline 是一种异空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数的调用;缺陷:可能会使目标文件变大;优势:少了调用的开销,提高程序运行的效率;
2.inline 对于编译器而言只是一个建议,至于会不会展开是编译器自己决定;
3.inline 不建议声明和定义分离,分离会导致链接错误,因为inline被展开了,就没有函数的地址,链接找不到;
auto可以自动识别类型,作用是:当定义一个类型很长的对象时,用auto比较方便;
比如:
int a = 20;
auto b = a; //自动识别b为int
auto b; //这种写法错误的,使用auto时必须初始化
注意:
1.auto不能作为函数的返回值和参数;
2.auto不能用来定义数组;
范围for的语法