轻松入门C++


前言:本章需要有部分C语言的基础,了解编译+链接的过程(代码如何变成可执行程序的过程),宏定义

命名空间

什么叫做命名空间呢?
在C语言中我们不能定义两个相同名称的变量不然会引发二义性编译器不知道什么时候该使用哪个变量,但是在C++中我们可以实现,但是我们呢需要在不同的域中去实现。
什么叫做不同的域呢?这里就提到了命名空间(关键字:namespace)
在这里插入图片描述
那么我们该如何去使用这些变量或者函数呢?我们需要另一个关键字(using)将域中的某个成员引入到文件中,这里的引入就相当于是个全局变量了,到哪儿都能用上
在这里插入图片描述
这里的”::“叫做域作用限制符,我们可以理解成我们用一堵墙把这里面的东西全部都圈起来,但是当我们想用的时候我们就在我们想要的那个东西的前面挖一个门出来(我们有透视),每需要一个东西就可以挖一个门出来。这里的拿出来其实不是很安全,我们往下看
这就相当于平行世界的我不能和这个世界的我相遇一样会引发某种规则的限制(中二一些的表示)
在这里插入图片描述
最后一点命名空间是可以进行嵌套的
在这里插入图片描述
像这样写也是可以的,C++的代码有很多的变化

C++的输入输出

既然是写代码,那么我们肯定就需要一定的交互,在C语言中,我们的输出是printf(”格式化“,x),在C++中我们引入了的概念,我们把输出叫做流插入,用箭头<<,输入叫做流提取,用箭头>>细心的友友在上文应该是看见了。但是我们呢需要包一个头文件:< iostream >
在这里插入图片描述
在使用之前我们需要把这里的C++标准库std给引入进来不然我们不方便使用这里的cout和cin。引入后我们就可以开始进行输入输出了。
在这里插入图片描述
这里的endl就和换行符\n一样,也是一种结束标志。

缺省参数

缺省参数分为全缺省和半缺省
那么什么是缺省值呢?我们在声明一个函数的时候一般会有函数的返回值,参数,函数体,那么缺省值就是在我们的参数中起作用的
缺省值的定义:我们在声明或者定义一个函数时为其参数指定一个缺省值,在调用函数的时候我们如果没有对应的实参进行传参就会使用默认的缺省值(也就是形参被赋予了一个默认值)否则用指定的实参。我们直接上图吧
在这里插入图片描述
说白了就是如果我们给定一个实参,那么我们函数中的形参就是实参的一份拷贝,如果我们没有给函数一个指定的实参,那么函数就会通过一个默认值也就是缺省值的数去运行我们的函数。
全缺省和半缺省:
在这里插入图片描述

缺省值的一些注意事项:
第二:缺省值不能同时出现在声明和定义中,不然也会引发二义性------你到底是采用哪个缺省值呢?
第三:缺省值必须是常量或者全局变量-----否则你想用的话,你也找不到因为域不同
C语言是不支持缺省值的!!!

函数重载

C++可以在同一个域中设立相同函数名的函数这就是函数重载
但是函数重载需要有几点要求
同名函数的参数个数,参数类型,参数顺序必须得确保有其一是不同的(对返回值没有要求),这是怎么实现的呢?
我们知道一个C或者CPP文件,从代码到可执行程序,需要经过预编译,编译,汇编,链接这几个过程,那么我们的函数是如何调用的呢?我们在汇编中会产生一种叫符号表的东西,他上面会记录我们函数的地址和名称,C语言不支持是因为C语言是直接根据函数的名字去寻找的函数但是C++对函数的名字进行了一些变形,它是由特定的符号 + 函数字符的个数 + 函数的名称 + 每个参数的首字母(这是在Linux的g++情景下)Windows的VS会比较麻烦不同的编译器的实现不同但是也能证明C++是可以区分同名函数的,也就可以构成函数重载。
在这里插入图片描述

引用

什么叫做引用呢?通俗的来讲就是取别名,比如张三的小名叫阿三,那么阿三就是张三的别名,阿三和张三就是同一个人
所以引用就是指同一块儿空间有不同的名称。取别名的符号是(&)
在这里插入图片描述
这么一看他和指针很类似,但是他并不是指针换句话说他的语法形式不是指针但是他的底层原理是指针
他的用途是在参数和做返回值上
我们先来讲引用的特性:
1.引用必须初始化
2.一旦引用了一个对象就不能再去引用下一个对象
3.同一个变量可以有多个引用(也就是多个小名)
我们先来看看引用是如何做参数的:
我们以前写的交换函数是怎么样的呢?
在这里插入图片描述
我们再来看看更高一点儿的用途,这是我们在写链表的时候我们需要用到的二级指针
在这里插入图片描述

还有更多的用法我在此就不演示了,我们接下来看看引用如何做返回值
在这里插入图片描述
我们在这里把c给返回了,但是是怎么返回的呢?这张图就能解释一下
在这里插入图片描述
给大家看个好玩的
在这里插入图片描述
注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用
引用返回,如果已经还给系统了,则必须使用传值返回。就指的是栈帧销毁如果变量还在就可以使用引用,这里的变量可以用static修饰的静态变量或者动态开辟的空间,其余还给操作系统的还是使用传值安全。

内联函数

我们在C语言中学过宏,宏非常的方便,他不会开辟空间,它是一种替换
在这里插入图片描述
但是宏也有不少缺点
1.它无法检查参数的类型
2.它的写法容易出问题
3.不方便调试
4.代码的可读性和维护性变差
那么有没有一个东西能集齐优点去其缺点呢?内联函数就诞生了(inline)(C语言没有内联函数)
内联函数它也是一种函数但是,它和普通的函数不一样,它不会去调用这个函数不会call,它和宏一样是直接在调用处展开不会建立栈帧,而且它有类型检查,也可以在设置中进行调试,写法和函数没什么差别就需要加关键字,代码的可读性变高
在这里插入图片描述
这种内联函数是一种空间换取时间的方式因为它是在调用处展开,增加了代码的数量,在面对少量的代码和频繁调用的函数时可以使用内联函数,但是要注意:内联函数它的展开与否是与编译器有关的,由编译器决定是否展开所以,就算你把所有的函数不管大量代码还是少量代码都写成了内联函数,编译器也会自行区分,有大量代码的函数编译器仍然会进行调用
特点:内联函数可以认为没有地址又或者说内联函数的地址不会被符号表所记录所以说它的声明和定义不要分离,否则会出现链接失败的情况。

关键字auto

这里的几个都是一些关键字用着用着就熟练了。
auto是一种自动检查类型的关键字
有了它就不用写一些很长的类型了比如我们自己typedef的那一些
注意:
用auto声明引用类型时则必须加&
auto不能做参数(编译器怎么知道你要传什么过来)
auto不能声明数组
在这里插入图片描述

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老幺*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值