一. 本篇要学习的内容和知识结构概览
![07b52dbd3c2417f25a90d6648b5c45ac.png](https://i-blog.csdnimg.cn/blog_migrate/a4dad16f963d454794a94abbc4714c68.jpeg)
二. 知识点逐条分析
1. 使用函数重载
C++允许为同一给函数定义几个版本, 从而使一个函数名具有多种功能, 这称之为函数重载.
像这样: 虽然函数名一样, 但是参数列表不一样, 一个求两个整型参数的最大值, 一个求三个整型参数的最大值.
![4b75ecea2317dd36ba2285c277fcdcdc.png](https://i-blog.csdnimg.cn/blog_migrate/4c457cb3369df52ed58de9960bd7455a.jpeg)
2. 新的基本数据类型及其注意事项
a. void是无类型标识符, 只能声明函数的返回值类型, 不能声明变量
b. C++当中有bool类型, 而C中没有
c. C++的常量分为符号常量, 浮点常量, 整数常量
像这样:
![94fe07a9fd94901bfbd2d7120f2bb0cf.png](https://i-blog.csdnimg.cn/blog_migrate/4bdbcc40cfe7cfac6fc65e1b7da9c231.jpeg)
我们可以通过屏幕输出来查看011, 11, 0x11各代表十进制的多少
![ce332a7297ff29525d37454e11179dbc.png](https://i-blog.csdnimg.cn/blog_migrate/8ed93ac84354a006c79dc1468b37f553.jpeg)
3. 动态分配内存
申请内存空间: new 类型名[size], 申请可以存size给该数据类型对象的存储空间
释放内存空间: delete 指针名;
像这样:
![3d45ce81473444f204224c02824dc22c.png](https://i-blog.csdnimg.cn/blog_migrate/5bd00073a069b2340046ce51e5959da0.jpeg)
4. 引用
为现有对象起个别名, 别名代表的内存空间与引用对象的内存空间是一样的
引用的声明方式: 数据类型(类型名) & 别名 = 对象名;
&的位置无关紧要
像这样:
![ea1c01cbbefc7e42d33be3b75503becb.png](https://i-blog.csdnimg.cn/blog_migrate/995a9ee37a7dc47a29959c71a7aedfda.jpeg)
我们再进一步的使用它
![9ab58802c53300928d223a06a13c21bd.png](https://i-blog.csdnimg.cn/blog_migrate/000cff909a157270cca4de46106185cf.jpeg)
可以看到, 上下两组输出结果是一样的, 也就是说引用b, 和变量a都是代表的同一块内存地址
所以更改b的值, a的值也会变
![748a41f1a60d49b973309a7cc801c7de.png](https://i-blog.csdnimg.cn/blog_migrate/1535f4f15ec09b76a31e26de12914c22.jpeg)
注意: 引用, 就是给一块已经存在的内存添加一个新的标识符, 所以使用引用没有分配新的内存空间, 所以可以通过引用来修改原来的对象, 但是不能有空引用, 它必须和一声正确的存储区域关联。
像这样: 是错误的
int & b;// 编译器提示信息: Declaration of reference variable 'b' requires an initializer, 变量b需要一个初始化器
引用的作用
a. 引用用于函数的参数表, 不产生临时对象, 提高安全性和执行效率
![fe41f7be0821d72233da2a35b29b1de6.png](https://i-blog.csdnimg.cn/blog_migrate/b0058094e3a1074a0e4349f935dcd8fc.jpeg)
b. 引用用于函数返回值 用到的时候很少, 因为不安全, 你可能会访问到一个已经被释放的对象
引用可以这么使用
![e0e9ddb6bf97a7e53d6b004c90541b80.png](https://i-blog.csdnimg.cn/blog_migrate/5a68e81da1ccaae982955b07a0562928.jpeg)
但是不能这么使用
![add60af1d28520a278f8264b722044c2.png](https://i-blog.csdnimg.cn/blog_migrate/387f1c444d4bccd001cbaccdca005e96.jpeg)
指针和引用的区别和联系
联系: 它们都会对内存地址上存在的变量进行修改, 但引用不占用新的地址, 节省开销
区别: 指针是低级的直接操作内存地址的机制, 可由整型数强制类型转换得到, 功能强大, 但是容易出错, 引用是较高级的封装了指针的特性, 不直接操作内存地址, 不可强制类型转换得到, 安全性高.
5. 对指针使用const限定符
a. 指向常量的指针
int a = 5;
int b = 8;
const int * p = &a; // 指向常量的指针, 也就是"*p="不成立, 也就是不能通过指针p修改指向的内存地址中的值, 但是p的值可以更改
*p = 10; // 错误
p = &b; // 正确
b. 常量指针
int a = 5;
int b = 8;
int * const p = &a; // 常量指针, 也就是"p="不成立, 也就是p的值不能更改, 但是是它所指向的内存地址中的值可以修改
*p = 10; // 正确
p = &b; // 错误
c. 指向常量的常量指针
int a = 5;
int b = 8;
const int * const p = &a; // 指向常量的的常量指针, 既不可以通过p修改它所指向的内存地址中的值, 也不可更改p的值
*p = 10; // 错误
p = &b; // 错误
6. 泛型算法应用于普通数组
![27990a036d0f19a2ab37b3bd38f18ed5.png](https://i-blog.csdnimg.cn/blog_migrate/5e37aae89aeaf218ec7411a377fb4584.jpeg)
![c64a764e82263977c95272342fe9a60f.png](https://i-blog.csdnimg.cn/blog_migrate/6b7545ce905cfbfb2c27dd7e49a5f3c0.jpeg)
7. 程序的编辑, 编译, 连接, 运行的基本概念
使用编辑器编辑一个C++源程序, 也就是源文件, 扩展名为.cpp, 像这样: Hello.cpp;
使用C++编译器对这个源程序进行编译, 产生目标文件, 扩展名为.obj, 像这样: Hello.obj;
使用连接程序, 将目标文件与系统库连接, 产生可执行文件, 扩展名为.exe, 你这样: Hello.exe
任何时候我们都不要忘记语言只是我们解决问题的工具, 思想才是我们解决问题的本质, 技术不深, 我们可以去查, 去练习, 而思想只有慢慢的去培养, 去思考, 去总结!
自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子,关注+私信【C/C++编程】微信公众号:C语言编程学习基地
有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!
![f84381a554db1ce231bf2282b3bfdbc3.png](https://i-blog.csdnimg.cn/blog_migrate/c2d45a2971d579b5b313e0db30bced4f.jpeg)
![595f06c006aafa6ab9cfcd46bf7b7101.png](https://i-blog.csdnimg.cn/blog_migrate/661810d9fdc4d52e0e0b5c9bcc5b32c2.jpeg)