前言
- 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!(持续更新ing~)
- 本章主要内容面向刚刚学完C语言,准备或正在接触C++的老铁。而往往C++奇多的小特性和知识点让铁铁们头晕晕脑涨涨,因而本章收纳了许多C++中零散的知识点,相信这篇基础章会帮助铁铁们更好地入门!主要的内容如下啦~
目录
一.缺省函数
二.命名空间域
三.访问限定符(C++实现封装的方式)
四. C++中的NULL与空指针区别
五.函数重载
六. 内联函数
1.内敛函数适用“短小,使用频繁的函数”
2.内敛函数的缺陷/特点
3.内联函数声明和定义必须要放在一起的原因
一.缺省函数
运用场景:
- 例:在通讯录项目时,可以省去初始化函数,通过参数的变化可以选择实现初始化/增删查改。
图示:
- (图中的StackInit函数就是缺省函数,当我们传入栈的地址时且没有传入第二个参数时,它会默认传入另一个参数4)
(小声说:图有点小糊...保证就这张!)
注意事项:
- 只有参数的后部参数才是可以缺省,即缺省函数参数后不可以再跟正常参数
缺省函数的定义和声明:
- 缺省函数只能放在函数声明中——编译器必须在使用函数之前知道缺省值
二.命名空间域
引入:在实际运用代码的过程中,可能存在局部变量之间命名冲突/库与局部变量命名之间相互冲突的情况,因而我们可以在局部域全局域之外设置一个区域:命名空间域。要使用时通过 a)展开命名空间域 / b)指定访问命名空间域 来实现。
程序在编译时的优先顺序:局部域->全局域->展开的命名空间域
图示:
三.访问限定符(C++实现封装的方式)
引入:如小标题所示,我们知道访问限定符是C++实现封装的方式,但是什么是封装呢?
封装本质上属于一种管理。例:计算机设计中的开机键,usb插口等等,让用户通过这些和计算机交互。而实际工作的是硬件元件。
在C++中实现封装,可以通过类和操作数据的方法进行结合,通过访问权限(访问限定符)来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。
访问限定符的分类:
访问限定符说明:
四. C++中的NULL与空指针区别
- 在C++中,NULL表示“ 0 ”, 实际是一个宏。
- 在C++中要表示 空指针,使用 nullptr。
图示:
五.函数重载
【函数重载】
- 是函数的一种特殊情况,C++允许在同一作用域中声名几个功能类似的同名函数显著特征:这些同名函数的形参列表(个数,类型,类型顺序)不同
注意点:对 返回值 没有要求 ,注意声明!(例:缺省函数)
图示:(注意函数声明时,是否存在缺省函数)StackInit
- 图中StackPush为函数重载
六. 内联函数
1.内敛函数适用“短小,使用频繁的函数”
- 当实现加法功能时,需要频繁调用加法函数,调用函数的过程中包含着频繁地开辟栈帧空间和关闭空间,会让程序运行速度变低。而解决类似问题可以使用“宏函数”,但是宏函数面临——易出错(需要括号确保直接替换后不受影响)。在这时使用内联函数,不会频繁开辟空间,大大提高了程序的运行速度。顶中顶有没有!!但别急,它也还有缺点呢~
2.内敛函数的缺陷/特点
- 内联函数的本质是通过牺牲空间换时间,运用内联函数程序的运行速度大大提升;但于此同时程序的大小也会急剧增大。因此面对一些逻辑稍微复杂的运算(循环/递归)便会大大造成冗余。
- inline对于编译器也仅仅是一个建议,最终是否成为inline,编译器自己会判断。
- 且默认debug状态下,inline不会起作用。
3.内联函数声明和定义必须要放在一起的原因
- 编译器一旦把某个函数作为内联函数处理,就会在其调用的位置展开,即该函数没有地址,源文件编译后不会形成符号表,没有链接冲突。同时也不能在其他源文件中调用,故一般都是直接在源文件中定义内联函数——可以在同一个项目不同的源文件中定义函数名相同但实现不同的inline函数。