Skip to content

Commit 21e937b

Browse files
committed
update format
1 parent 3125853 commit 21e937b

12 files changed

+136
-265
lines changed

C++入门/.DS_Store

6 KB
Binary file not shown.

C++入门/1.C++基础.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ C++提供了5种变量等级“类型修饰词”(type modifier),包括aut
170170
171171
全局变量是在所有函数体的外部定义的,程序的所有部分(甚至其他文件中的代码)
172172
都可以使用。
173-
全局变量不受作用域的影响,总是可用的(也就是说,全局变量的生命期一直到程序的结束)。
173+
全局变量不受作用域的影响,总是可用的(也就是说,全局变量的生命周期一直到程序的结束)。
174174
如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。例如:
175175
176176
```c++
@@ -280,7 +280,7 @@ int main() {
280280

281281
static的第二层意思和前面的含义相关,即“在某个作用域外不可访问”。当应用static于函数名和所有函数外部的变量时,它的意思是“在文件的外部不可以使用这个名字”。
282282
函数名或变量是局部于文件的;我们说它具有文件作用域(file scope)。例如,编译和连接
283-
下面两个文件会引起连接器错误
283+
下面两个文件会引起链接器错误
284284

285285
```c++
286286
FileStatic.cpp
@@ -394,7 +394,7 @@ int &refVal5 = dval; // 错误:此处引用类型的初始值必须是int型
394394

395395
```c++
396396
int rats;
397-
int& rodents = rats;
397+
int &rodents = rats;
398398
```
399399
这个引用声明允许将rats和rodents互换,它们指向相同的值和内存单元。
400400

@@ -403,7 +403,7 @@ int& rodents = rats;
403403

404404
```c++
405405
accumulate(team, two);
406-
free_throws& accumulate(free_thorws& target, const free_throws& source) {
406+
free_throws &accumulate(free_thorws& target, const free_throws& source) {
407407
return target;
408408
}
409409
```

C++入门/2.类.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#ifndef UNTITLED_STOCK_H
2121
#define UNTITLED_STOCK_H
2222

23-
#include "string"
23+
#include <string>
2424

2525
class Stock {
2626

@@ -41,7 +41,7 @@ public:
4141

4242
void show();
4343

44-
Stock(const std::string& co, long n, double pr);
44+
Stock(const std::string &co, long n, double pr);
4545
};
4646

4747
inline void Stock::set_toto() {
@@ -53,10 +53,10 @@ inline void Stock::set_toto() {
5353
然后要在.cpp文件中进行实现:
5454

5555
```c++
56-
#include "iostream"
56+
#include <iostream>
5757
#include "Stock.h"
5858

59-
Stock::Stock(const std::string& co, long n, double pr) {
59+
Stock::Stock(const std::string &co, long n, double pr) {
6060
company = co;
6161
if (n < 0) {
6262
std::cout << "Number can < 0";
@@ -162,7 +162,7 @@ int main() {
162162

163163
如果没有内存对齐,数据都是一个接着一个存储的。那么为了访问未对齐的数据的内存,CPU处理器一次读取的内存数据(8字节)可能包含两个数据的存储数据,而导致数据读取不完整,需要作两次内存访问;而对齐的内存访问仅需要一次访问。
164164

165-
2为了可以在不同平台上兼容。
165+
2. 为了可以在不同平台上兼容。
166166

167167
基本数据类型的内存对齐:
168168
计算机系统对基本类型数据在内存中放的位置做了限制,它们会要求这些数据的首地址是一个数(一般为4---32位系统或者8---64位系统)的整数倍,也就是说这些数据的首地址被放到4/8的整数倍的地址中。
@@ -360,9 +360,9 @@ int main(int argc, const char * argv[]) {
360360
在 C++ 中,虚函数的实现原理基于两个关键概念:虚函数表和虚函数指针。
361361

362362
虚函数表:每个包含虚函数的类都会生成一个虚函数表(Virtual Table),其中存储着该类中所有虚函数的地址。
363-
虚函数表是一个由指针构成的数组,每个指针指向一个虚函数的实现代码。
363+
虚函数表是一个由指针构成的数组,每个指针指向一个虚函数的实现代码。
364364
虚函数指针:在对象的内存布局中,编译器会添加一个额外的指针,称为虚函数指针或虚表指针(Virtual Table Pointer,简称 VTable 指针)。
365-
这个指针指向该对象对应的虚函数表,从而让程序能够动态地调用正确的虚函数。
365+
这个指针指向该对象对应的虚函数表,从而让程序能够动态地调用正确的虚函数。
366366
当一个基类指针或引用调用虚函数时,编译器会使用虚表指针来查找该对象对应的虚函数表,并根据函数在虚函数表中的位置来调用正确的虚函数。
367367

368368

@@ -377,7 +377,7 @@ Animal *base = new Cat();
377377

378378
为了解决这个问题就要用虚析构。
379379

380-
虚析构的作用: 通过基类指针、引用释放子类的所有空间。
380+
虚析构的作用: 通过基类指针、引用释放子类的所有空间。
381381
虚析构: 在虚析构函数前加上virtual修饰。
382382

383383
### 纯虚析构
@@ -401,12 +401,16 @@ B::~B() {
401401
## 模板
402402
403403
模板(可以理解为java的泛型)是实现代码重用机制的一种工具,它可以实现参数类型化,即把参数定义为类型,从而实现代码的可重用性。同时,模板能够减少源代码量并提高代码的机动性,却不会降低类型安全。
404+
404405
在C++语言中模板有两种,分别为“函数模板”(Function Template)与“类模板”(Class Template)。模板就是把功能相似、仅数据类型不同的函数或类设计为通用函数模板或类模板,提供给用户。
406+
405407
模板是“泛型编程”的基础,所谓泛型编程就是用独立于任何特定类型的方式编写代码。所以简单的说,类是对象的抽象,而模板又是类的抽象,用模板能定义出具体类。
406408
407409
408410
基本上,无论是函数模板还是类模板的设计,都是把相同程序代码的函数集中编写在一起,而对于函数模板或类模板中的数据类型部分,则以模板形式参数(Template Formal Parameter)来替代。
411+
409412
当程序调用函数模板或类模板时,会根据传递参数的数据类型,把模板形式参数替换成该参数的数据类型,以创建此函数模板或类模板的程序实例(Instance)。
413+
410414
在设计类时,将数据类型以模板参数取代,在使用时再指定数据类型,这种类就称为类模板(Class Template)。在程序中,将会根据声明对象时所指定的数据类型来创建适用该数据类型的类。类模板的声明格式如下:
411415
412416
```c++
@@ -416,9 +420,11 @@ template <class或typename T> 返回类型 函数名(形式参数表) {
416420
```
417421
关键字class和typename有什么区别?
418422
在模板定义中,关键字typename和class意义相同,可以互换使用,甚至可以在同一个模板形参表中同时存在。
423+
419424
但关键字typename是作为标准c++的组成部分加入到c++中的,因此旧的程序更有可能只用关键字class。
420425

421426
类模板的声明格式与函数模板类似,而声明的模板形式参数可以运用于类内的数据成员与成员函数。
427+
422428
另外,若是类成员函数定义在类外部,则必须附加其类模板声明与范围解析运算符(::),如下所示:
423429

424430
```c++

C++入门/3.引用参数和值参数.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
- 程序员能修改调用函数中的数据对象
88
- 通过传递引用而不是整个数据对象,可以提高程序的运行速度。
99

10-
当数据对象较大时(如结构和类对象),第二个原因最重要。这些也是使用指针参数的原因。这是有道理的,因为引用参数实际上是基于指针的代码的另一个接口。那么,什么时候应该使用引用、什么时候应该使用指针呢? 什么时候应该按值传递呢?
10+
当数据对象较大时(如结构和类对象),第二个原因最重要。这些也是使用指针参数的原因。
11+
这是有道理的,因为引用参数实际上是基于指针的代码的另一个接口。
12+
13+
那么,什么时候应该使用引用、什么时候应该使用指针呢? 什么时候应该按值传递呢?
1114
下面是一些知道原则:
1215
对于使用传递的值而不作修改的函数。
1316
- 如果数据对象很小,如内置数据类型或小型结构,则按值传递

C++入门/3.运算符重载.md

Lines changed: 0 additions & 167 deletions
This file was deleted.

C++入门/4.动态内存.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
4.动态内存
2+
23
===
34

45

56
为了最大化运行速度,通过将对象存放在栈中或静态存储区域中,存储和生命期可以在编写程序时确定。
67
栈是内存中的一个区域,可以直接由微处理器在程序执行期间存放数据。在栈中的变量有时称为自动变量(automatic variable)或局部变量(scoped variable)。
78
静态存储区域简单说是内存的一个固定块,在程序开始执行以前分配。使用栈或静态存储区,可以快速分配和释放,有时这是有价值的。
89
然而,我们牺牲了灵活性,因为程序员必须在写程序时知道对象的准确数量、生命期和类型。
9-
如果程序员正在解决一个更一般的问题,例如计算机辅助设计、仓库管理或者空
10-
中交通控制,这就太受限制了。
10+
如果程序员正在解决一个更一般的问题,例如计算机辅助设计、仓库管理或者空中交通控制,这就太受限制了。
1111

1212

1313
第二种方法是在称为堆(heap)的区域动态创建对象。
@@ -75,12 +75,12 @@ delete[] p2; // 数组的delete必须带[]
7575
- 使用已经释放掉的对象。通过在释放内存后将指针置为空,有时可以检测出这种错误。
7676
- 同一块内存释放两次。当有两个指针指向相同的内存分配对象时,可能发生这种错误。如果对其中一个指针进行了delete操作,对象的内存就被归还给自由空间了,如果我们随后又delete第二个指针,自由空间就可能被破坏。
7777

78-
坚持只使用智能指针,就可以避免所有这些问题。对于一块内存,只有在没有任何只能指针指向它的情况下,只能指针才会去自动释放它
78+
坚持只使用智能指针,就可以避免所有这些问题。对于一块内存,只有在没有任何智能指针指向它的情况下,智能指针才会去自动释放它
7979

8080
为了更容易(同时也更安全)的使用动态内存,C++标准库提供了智能指针(smart pointer)类型来管理动态对象。
8181
智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。
8282
C++标准库提供了四种指针来管理底层指针的方式:
83-
- std::shared_ptr: 共享式指针,多个指针指向同一个对象,最后一个指针被销毁时,这个对象就会被释放。shared_ptr的工作机制是使用引用计数,每一个shared_ptr指向相同的对象(内存),所以很想然,只有最后一个指向该对象的shared_ptr指针不需要再指向该对象时,这个shared_ptr才会去析构所指向的对象。
83+
- std::shared_ptr: 共享式指针,多个指针指向同一个对象,最后一个指针被销毁时,这个对象就会被释放。shared_ptr的工作机制是使用引用计数,每一个shared_ptr指向相同的对象(内存),所以很显然,只有最后一个指向该对象的shared_ptr指针不需要再指向该对象时,这个shared_ptr才会去析构所指向的对象。
8484
- std::unique_ptr:独占式指针,同一个时间内只有一个指针能够指向该对象,当然,该对象的拥有权是可以移交出去的。
8585
- std::auto_ptr:C++98中提出的,目前已经完全被std::unique_ptr取代。
8686
- std::weak_ptr:它是一种弱引用,指向shared_ptr所管理的对象。弱引用可以理解成是监视shared_ptr(强引用)的生命周期用的,是一种对shared_ptr的扩充,不是一种独立的智能指针,不能用来操作所指向的资源,所以它看起来像是一个shared_ptr的助手。所以它的智能也就智能在能够监视到它所指向的对象是否存在了。

C++入门/6.C++核心编程.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -946,9 +946,9 @@ int main() {
946946
947947
#### 关系运算符重载
948948
949-
**作用:**重载关系运算符,可以让两个自定义类型对象进行对比操作
949+
***作用***:重载关系运算符,可以让两个自定义类型对象进行对比操作
950950
951-
**示例:**
951+
***示例***
952952
953953
```C++
954954
class Person

C入门/2.指针(二).md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ double avaerage(double a, double b) {
138138
每一个形式参数都必须有类型。而我们在调用该函数的时候,为了调用函数,需要写出函数名及跟随其后的实际参数(argument)列表。例如,average(x, y)是对average函数的调用。实际参数用来给函数提供信息。在此例中,会把变量x和y的值复制给形式参数a和b。
139139
140140
在C语言中,实际参数是通过值传递的:调用函数时,计算出每个实际参数的值并且把它复制给相应的形式参数。
141-
在函数执行过程中,对形式参数的改变不会影响实际参数的值,这事因为形式参数中包含的是实际参数值的副本
141+
在函数执行过程中,对形式参数的改变不会影响实际参数的值,这是因为形式参数中包含的是实际参数值的副本
142142
143143
## 通过值调用
144144
@@ -291,7 +291,7 @@ Value of var variable: 666
291291

292292
## NULL指针
293293

294-
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋值一个NULL值是一个良好的编程习惯。赋值为NULL值得指针被称为空指针
294+
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋值一个NULL值是一个良好的编程习惯。赋值为NULL值的指针被称为空指针
295295

296296
NULL指针是一个定义在标准库中的值为零的常量。
297297

C入门/3.结构体(三).md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
struct tag {
99
member-list
1010
...
11-
}variable-list;
11+
} variable-list;
1212
```
1313

1414
- tag是结构体标签。
@@ -20,7 +20,7 @@ struct Books {
2020
char title[50];
2121
char author[50];
2222
int book_id;
23-
}book;
23+
} book;
2424
```
2525
一般情况下,tag、member-list、variable-list这3部分至少要出现2个。
2626

0 commit comments

Comments
 (0)