Skip to content

Commit a670764

Browse files
committed
Modified some texts and Added PDF version
1 parent 2ca6864 commit a670764

File tree

2 files changed

+44
-33
lines changed

2 files changed

+44
-33
lines changed

C++Tutorial.pdf

243 KB
Binary file not shown.

README.md

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
- 直接初始化和拷贝初始化(用赋值符号进行的初始化)
6464
- 直接初始化的两种形式:
6565

66-
```
66+
```c++
6767
string valuename("value");
6868
string valuename(n,‘c’);
6969
```
@@ -76,7 +76,7 @@
7676
- 函数s.empty()和s.size()
7777
- 运用cctype头文件进行处理string对象中的字符
7878
- 基于范围的for
79-
```
79+
``` c++
8080
for (declaration: expression)
8181
statement
8282
```
@@ -88,7 +88,7 @@
8888
- 使用vector有何优点?
8989
- 定义和初始化方式
9090

91-
```
91+
```c++
9292
vector<T> v1;
9393
vector<T> v2(v1);
9494
vector<T> v2 = v1;
@@ -107,7 +107,7 @@
107107
4. 迭代器
108108
- 掌握迭代器的使用
109109

110-
```
110+
```c++
111111
atuo itBegin = v.begin(), itEnd = v.end();
112112
```
113113
- begin成员返回第一个元素的迭代器
@@ -179,6 +179,7 @@
179179
- 掌握点运算符和箭头运算符
180180
- 各自左右值的区分
181181
7. 条件运算符
182+
182183
- 掌握并运用唯一的三元运算符——条件运算符( cond ? expr1 : expr2 )
183184
8. 位运算符
184185
- 掌握移位运算符的原理和操作使用(区别于IO中的重载版本)
@@ -187,11 +188,11 @@
187188
9. sizeof运算符
188189
- 返回一个表达式或类型名字所占的字节数,结果是size_t类型
189190
- 对类型使用
190-
```
191+
```c++
191192
sizeof (type)
192193
```
193194
- 对表达式使用
194-
```
195+
```c++
195196
sizeof expr
196197
Sales_data data, *p;
197198

@@ -222,11 +223,12 @@
222223
- 复合语句在编程中使用的普遍性(举例)
223224
- 块不以分号作为结束。块本身由花括号决定始末。
224225
2. 语句作用域
226+
225227
- 熟悉在语句的不同位置出现的变量的作用域。(句内、句外,产生的影响)
226228
3. 条件语句
227229
- if语句
228230
- 基本模式
229-
```
231+
```c++
230232
//if语句
231233
if (condition)
232234
statement;
@@ -258,14 +260,14 @@
258260
4. 迭代语句
259261
- while语句
260262
- 基本模式
261-
```
263+
```c++
262264
while (condition)
263265
statement
264266
```
265267
- 要注意到定义在while条件部分和while循环体内的变量每次迭代都会经历从创建到销毁的过程
266268
- 传统for语句
267269
- 基本模式
268-
```
270+
```c++
269271
for (initializer; condition; expression)
270272
statement
271273
```
@@ -275,15 +277,15 @@
275277
- 熟悉for语句中各部分的变量作用域
276278
- 范围for语句
277279
- 基本模式
278-
```
280+
```c++
279281
for (declaration: expression)
280282
statement
281283
```
282284
- 掌握范围for的执行原理
283285
- do while语句
284286
- do while语句是唯一一个必须先无条件执行一次循环体的迭代语句。
285287
- 基本模式
286-
```
288+
```c++
287289
do
288290
statement
289291
while (condition)
@@ -302,6 +304,7 @@
302304
- goto的功能是从goto语句无条件跳转到同一函数的另一条语句。(不建议使用。)
303305
- 了解goto的用法
304306
6. TRY语句块和异常处理
307+
305308
- 暂不要求掌握此部分
306309
## 第6章 函数
307310
1. 函数基础
@@ -317,7 +320,7 @@
317320
- 参数列表(形参列表)
318321
- 函数体
319322
注:区别函数的关键在于***函数名***和***参数列表***
320-
```
323+
```c++
321324
#include <iostream>
322325

323326
int add(int, int); // function prototype, declare a function
@@ -335,7 +338,7 @@
335338
{
336339
return num1 + num2;
337340
}
338-
```
341+
```
339342
- 调用函数
340343
了解函数调用的过程机制
341344
- 函数如何调用?
@@ -364,21 +367,22 @@
364367
- 当形参为指针类型时,进行值传递也是将实参指针的值拷贝给形参
365368

366369
理解这句话
370+
367371
> 值传递过程中,函数对形参所有的操作不会影响实参,不改变实参的任何内容
368372
- 引用传递
369373
- 引用的操作实际上是作用的在引用所引的对象上
370374
- 引用传递允许函数改变一个或多个实参的内容
371375
- 普通引用只接受同类型的对象作为初始值
372376
- 常量引用可以用同类型对象、表达式、字面值初始化
373-
- 如果函数需要多个返回值,可以使用引用形参来返回额外信息
374-
377+
- 如果函数需要多个返回值,可以使用引用形参来返回额外信息
378+
375379
理解这两句话
376380
> 传递引用可以避免对象的拷贝,因此建议尽量使用引用传递
377381
> 如果不需要改变引用形参的值,最好使用常量引用,它能接受的实参类型比普通引用多
378382
- const形参和实参
379383
- 当形参中有顶层const时,允许传递常量对象和非常量对象
380384
注意以下例子
381-
```
385+
```c++
382386
void func(const int i) {/* func能够读取i,但无法写入i */}
383387
void func(int i) {/* ... */} // 错误:重复定义了func
384388
```
@@ -387,7 +391,7 @@
387391
- 不支持拷贝
388392
- 数组名会被自动转化为指针(数组名 - 参考“数组”一章节)
389393
- 数组形参的使用和调用
390-
```
394+
```c++
391395
void print(const int*);
392396
void print(const int[]);
393397
void print(const int[10]);
@@ -397,30 +401,33 @@
397401
- 了解数组形参并没有传递数组的大小
398402
- 掌握防止数组形参在函数体内越界的三种办法:
399403
1. 使用数组引用形参
400-
```
404+
```c++
401405
void print(int (&arr)[10] );
402406
// &arr 必须用圆括号括起来提升优先级
403407
```
404408
- 不过这种定义也限制了我们只能传递维度既定的数组
405409
2. 使用标准库规范
410+
406411
- 传递首元素和尾后元素的指针
407412
3. 显式传递一个表示数组大小的形参
408413
- 了解传递多维数组中的细节
409-
```
414+
```c++
410415
void print(int matrix[10][10], int rowSize);
411416
// 数组会被自动转化为指针,上述函数原型等同于
412417
void print(int (*matrix)[10], int rowSize);
413418
// 需要rowSize来指定二维数组的第一个维度大小
414419
```
415420
- main函数的形参:处理命令行选项
421+
416422
- 简单了解main函数的形参的功能
417423
- 含有可变兴产的函数
424+
418425
- 简单了解如何传递不定量的参数
419426
3. 返回类型和return语句
420427
- 了解return语句的功能
421428
- return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方
422429
- return语句有两种形式
423-
```
430+
```c++
424431
return; // 无返回值
425432
return expression; // 有返回值
426433
```
@@ -431,12 +438,13 @@
431438
- 有返回值return提供了函数执行的结果
432439
- 返回值类型必须和函数返回值类型一致(或能够进行隐式类型转换)
433440
- 确保有返回值函数只能通过一条有效的return语句退出
441+
434442
- 确保函数无论哪条路径都能有return退出
435443
- 了解函数返回值是如何返回的
436444
- 返回一个值的方式和初始化一个变量或形参的方式完全一样
437445
- 返回值用于初始化调用点的一个临时量,该临时量就是函数调用的结果
438446
- ***不要返回局部对象的引用或指针***
439-
```
447+
```c++
440448
const string &manip()
441449
{
442450
string ret;
@@ -452,7 +460,7 @@
452460
```
453461
- 返回类 类型的函数和调用运算符
454462
- 如果函数返回指针、引用或者类的对象,可以直接在函数调用的结果访问结果对象的成员
455-
```
463+
```c++
456464
const string shorterString(string, string);
457465
...
458466
...
@@ -466,13 +474,14 @@
466474
- 如果函数返回的是引用类型的对象,可以直接对函数调用的结果进行赋值
467475
- 列表初始化返回值
468476
- 了解C++11中支持的“函数可以返回花括号包围的值的列表”
469-
```
477+
```c++
470478
vector<string> process()
471479
{
472480
return {"Hi", "bye"};
473481
}
474482
```
475483
- main函数的返回值
484+
476485
- 简单了解mian函数返回值的意义
477486
- 理解并掌握如何使用递归函数
478487
- 返回数组指针
@@ -483,7 +492,7 @@
483492
4. 函数重载
484493
- 掌握何为重载函数和如何进行函数的重载
485494
- 同一作用域内的几个函数名相同但形参列表不同的函数,称为**重载函数**
486-
```
495+
```c++
487496
// print函数的3个重载
488497
void print(const char *cp);
489498
void print(const int *beg, const int *end);
@@ -493,6 +502,7 @@
493502
- 类型别名不构成重载,顶层const不构成重载
494503
- 简单了解const_cast重载
495504
- 重载函数的调用
505+
496506
- 掌握函数匹配的机制(见“函数匹配”)
497507
5. 特殊用途与语言特性
498508
理解并掌握默认实参、内联函数和constexpr函数
@@ -503,13 +513,13 @@
503513
- 默认实参声明
504514
- 允许多次声明同一个函数,给不同的形参添加默认实参
505515
- 在给定的作用域中,一个形参只能被赋予一次默认实参
506-
```
516+
```c++
507517
string screen( int width, int height, char title = ' ' );
508518
string screen( int width, int height, char title = '*' ); // 错误:一个形参只能被赋予一次默认实参
509519
string screen( int width = 24, int height = 80, char title ); // 正确:可以看到它并没有再次给title设置默认实参
510520
```
511521
- 默认实参初始化
512-
```
522+
```c++
513523
int wd = 80;
514524
char def = ' ';
515525
int ht();
@@ -541,8 +551,9 @@
541551
- 程序转向一个新的位置继续执行
542552
- 把函数声明为内联函数可以避免这一系列的开销
543553
> 函数声明前加上inline关键字将函数转换为内联函数
544-
>> 声明为内联函数后,在编译时将函数在每个调用点上“内联地”展开
545-
>>> 因为要展开,所以内容长的函数不适合内联
554+
> > 声明为内联函数后,在编译时将函数在每个调用点上“内联地”展开
555+
> >
556+
> > > 因为要展开,所以内容长的函数不适合内联
546557
- constexpr函数
547558
了解什么是constexpr函数
548559
- 能用于常量表达式的函数
@@ -569,13 +580,12 @@
569580
1. 每个实参的匹配都不劣于其他可行函数的匹配
570581
2. 至少有一个实参的匹配优于其他可行函数的匹配
571582
3. 满足条件的函数只能有一个
572-
```
583+
```c++
573584
void f();
574585
void f(int);
575586
void f(int, int);
576587
void f(double, double=3.14);
577588

578-
579589
f(1, 1.2); // 错误:二义性调用
580590
// 考虑第一个参数时f(int, int)胜出,考虑第二个参数时f(double, double)胜出,因此没有最佳匹配
581591
```
@@ -604,23 +614,24 @@
604614
函数指针有以下特殊:
605615
1. 函数名会自动地转换成指针,取地址符不是必须的
606616
2. 可以直接使用指向函数的指针调用函数,解引用不是必须的
607-
```
617+
```c++
608618
pf = lengthCompare;
609619
pf = &lengthCompare;
610620
```
611621
- 调用函数指针
612-
```
622+
```c++
613623
bool b1 = pf( "Hello", "goodbye" );
614624
bool b2 = (*pf)( "Hello", "goodbye" );
615625
bool b3 = lengthCompare( "Hello", "goodbye" );
616626
```
617627
- 函数指针形参
618-
```
628+
```c++
619629
void useBegger( const string &s1, const string &s2, bool pf( const string &, const string & ));
620630

621631
void useBegger( const string &s1, const string &s2, bool (*pf)( const string&, const string& ));
622632
```
623633
上面两个函数都是合法的
634+
624635
> 我们在使用函数指针作形参时, 可以显示的将形参定义成指向函数的指针, 也可以直接使用函数类型,会自动转换为函数指针
625636
## 第7章 类
626637
1. 定义抽象数据类型

0 commit comments

Comments
 (0)