66
77## 1 类型增强
88
9- * 类型检查更严格
9+ ### 1.1 类型检查更严格
10+
1011比如一个 const 类型的指针赋值给非const 类型的指针。c 语言中可以通的过,但是在 c++ 中则编不过去
1112``` cpp
1213int main ()
@@ -20,7 +21,8 @@ int main()
2021```
2122
2223![ ] ( img/1_Externsion/file-20250407145721348.png )
23- * 布尔类型(bool)
24+ ### 1.2 布尔类型(bool)
25+
2426C 语言的逻辑真假用 0 和非 0 来表示,C++ 中有了具体的类型
2527``` cpp
2628int main ()
@@ -34,7 +36,8 @@ int main()
3436 return 0;
3537}
3638```
37- * 枚举(enum)
39+ ### 1.3 枚举(enum)
40+
3841C 语言中枚举类型本质就是整型,枚举变量可以用任意整型赋值,而 C++中枚举变量只能用被枚举出来的元素初始化。
3942``` cpp
4043enum season
@@ -54,7 +57,8 @@ int main()
5457
5558![ ] ( img/1_Externsion/file-20250407150939601.png )
5659
57- * 表达式的值可被赋值
60+ ### 1.4 表达式的值可被赋值
61+
5862c 语言中表达式通常不能作为左值的,即不可被赋值,c++中某些表达式是可以赋值的。比如
5963``` cpp
6064#include < iostream>
@@ -157,10 +161,11 @@ int main()
157161
158162## 3 函数重载(function overload)
159163
160- * 重载规则
161- 1. 函数名相同
162- 2. 参数个数不同,参数的类型不同,参数顺序不同,均可构成重载
163- 3. 返回值类型不同则不可以构成重载。
164+ ### 3.1 重载规则
165+
166+ 1 . 函数名相同
167+ 2 . 参数个数不同,参数的类型不同,参数顺序不同,均可构成重载
168+ 3 . 返回值类型不同则不可以构成重载。
164169
165170``` cpp
166171void func (int a); //ok
@@ -171,9 +176,10 @@ char func(int a); //与第一个函数有冲突
171176```
172177有的函数虽然有返回值类型,但不与参数表达式运算,而作一条单独的语句
173178
174- * 匹配原则:
175- 1. 严格匹配,找到则调用。
176- 2. 通过隐式转换寻求一个匹配,找到则调用
179+ ### 3.2 匹配原则
180+
181+ 1. 严格匹配,找到则调用。
182+ 2. 通过隐式转换寻求一个匹配,找到则调用
177183```cpp
178184#include <iostream>
179185using namespace std;
@@ -231,7 +237,8 @@ int main()
231237
232238通常情况下,函数在调用时,形参从实参那里取得值。对于多次调用用一函数同一实参时,C++给出了更简单的处理办法。给形参以默认值,这样就不用从实参那里取值了
233239
234- * 单个参数
240+ ### 5.1 单个参数
241+
235242``` cpp
236243#include < iostream>
237244#include < ctime>
@@ -252,7 +259,9 @@ int main()
252259 return 0;
253260}
254261```
255- * 多个参数
262+
263+ ### 5.2 多个参数
264+
256265```cpp
257266float volume(float length, float weight = 4,float high = 5)
258267{
@@ -270,10 +279,11 @@ int main()
270279}
271280```
272281
273- * 规则
274- 1,默认的顺序,是从右向左,不能跳跃。
275- 2,函数声明和定义一体时,默认认参数在定义(声明)处。声明在前,定义在后,默认参数在声明处。
276- 3,一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统无法确认是重载还是默认参数
282+ ### 5.3 规则
283+
284+ 1 . 默认的顺序,是从右向左,不能跳跃。
285+ 2 . 函数声明和定义一体时,默认认参数在定义(声明)处。声明在前,定义在后,默认参数在声明处。
286+ 3 . 一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统无法确认是重载还是默认参数
277287``` cpp
278288void print (int a)
279289{
@@ -330,7 +340,8 @@ int main() {
330340
331341```
332342
333- 引用的主要特点:
343+ ### 6.1 主要特点
344+
3343451. **必须初始化**
335346 - 声明引用时必须立即初始化
336347 - 不能像指针那样先声明后赋值
@@ -340,7 +351,8 @@ int main() {
3403513. **不占用额外内存**
341352 - 引用只是一个别名,不会分配新的内存空间
342353
343- 引用的常见用途:
354+ ### 6.2 常见用途
355+
3443561. **函数参数**
345357 - 避免值传递的拷贝开销
346358 - 允许函数修改参数的值
@@ -355,7 +367,8 @@ for (int& num : nums) { // 使用引用可以修改元素
355367}
356368```
357369
358- 与指针的比较:
370+ ### 6.3 与指针的比较
371+
3593721 . ** 安全性**
360373 - 引用不能为空
361374 - 不需要解引用操作符
@@ -409,7 +422,8 @@ int main() {
409422```
410423![ ] ( img/1_Externsion/file-20250407171313606.png )
411424
412- new 和 delete 的特点
425+ ### 7.1 new 和 delete 的特点
426+
4134271 . ** 自动计算所需空间**
414428 - ` new ` 会根据类型自动计算需要分配的内存大小
415429 - 不需要像 ` malloc ` 那样手动计算字节数
@@ -420,7 +434,7 @@ new 和 delete 的特点
420434 - ` new ` 返回对应类型的指针,不需要类型转换
421435 - 而 ` malloc ` 返回 ` void* ` ,需要手动转换类型
422436
423- 数组形式
437+ ### 7.2 数组形式
424438``` cpp
425439// 分配数组
426440int * arr = new int [10 ];
@@ -429,7 +443,8 @@ int* arr = new int[10];
429443delete[] arr;
430444```
431445
432- 注意事项
446+ ### 7.3 注意事项
447+
4334481 . ** 内存泄漏**
434449 - 使用 ` new ` 分配的内存必须用 ` delete ` 释放
435450 - 数组形式必须用 ` delete[] ` 释放
@@ -456,7 +471,7 @@ auto p = make_unique<int>(42);
456471
457472内联函数是 C++ 中提供的一个关键特性,用于优化程序性能。通过在函数定义前加上 ` inline ` 关键字,可以建议编译器将函数调用处用函数体替换。
458473
459- * 基本语法
474+ ### 8.1 基本语法
460475
461476```` cpp
462477#include < iostream>
@@ -483,23 +498,24 @@ inline int Calculator::subtract(int a, int b) {
483498}
484499````
485500
486- * 特点和使用场景
487- 适用场景
488- - 函数体积小
489- - 频繁调用的函数
490- - 不含复杂控制流程(如循环、switch 等)
491- - 不是递归函数
492- 优点
493- - 减少函数调用开销
494- - 提高程序执行效率
495- - 可能减少栈的使用
496-
497- * 缺点
501+ ### 8.2 特点和使用场景
502+
503+ 适用场景
504+ - 函数体积小
505+ - 频繁调用的函数
506+ - 不含复杂控制流程(如循环、switch 等)
507+ - 不是递归函数
508+ 优点
509+ - 减少函数调用开销
510+ - 提高程序执行效率
511+ - 可能减少栈的使用
512+
513+ 缺点
498514 - 可能增加代码体积
499515 - 不适合大型函数
500516 - 过度使用可能导致程序膨胀
501517
502- * 实际使用示例
518+ ### 8.3 实际使用示例
503519
504520````cpp
505521#include <iostream>
@@ -528,7 +544,8 @@ int main() {
528544}
529545````
530546
531- * 注意事项
547+ ### 8.4 注意事项
548+
5325491 . ** 内联是建议性的**
533550 - 编译器可能会忽略 inline 关键字
534551 - 也可能会自动内联未标记的函数
@@ -560,7 +577,7 @@ int main() {
560577 }
561578 ```
562579
563- * 最佳实践建议
580+ * 建议
564581 1. 优先在头文件中定义内联函数
565582 2. 只将简单、小巧的函数声明为内联
566583 3. 让编译器自动决定是否内联
0 commit comments