《C++ Primer Plus》啃书计 第1~4章

《C++ Primer Plus》啃书计 第1~4章

第一章 预备知识

1.1—1.3略过

1.4 程序创建的技巧

1. cfront,它将C++源代码翻译成C源代码,然后再使用标准C编译器进行编译

2. 现在有越来越多的实现转向创建C++编译器,直接将C++源代码编译,加速了编译过程。这也强调了C++是一门独立于C(虽然相似)的语言

3. UNIX: .c->.o->.out(executable), 如果只有一个源文件,链接程序会在生成.out后删除.o

 Linux: 最常用的编译器是g++(GNU C++编译器)

 Windows:可执行文件名为.exe

      compile意味着对当前打开的文件中的代码进行编译

      build & make是编译项目中所有源代码文件的代码(是个递增过程,例如3个文件只改一个,则只重新编译改的那个文件)

      build all重新编译所有

      link将编译后的源代码与所需的库代码链接起来

      run or execute运行程序,run会自动完成前述步骤(如果没有)

      debug断点调试,以步进方式执行程序

 Macintosh:Xcode

4. 编译器发布版和调试版的区别:调试版包含额外的代码,会增大程序规模,降低运行速度,但是可以提供详细的调试信息

1.5 总结

1. C:控制结构、函数,结构化编程

2. C++:面向对象编程和泛型编程

2020.07.15:07更新

=================================================================================================================================

 第二章 开始学习C++

2.1 进入C++

1. main()函数是入口,int main()和int main(void)是等价的

2. 注释,单行用“//”,多行用“/* xxx */”

3. 以#开头的指令是预处理指令,如#include <iostream>将iostream文件的内容添加到程序中。

预处理器操作:在源代码被编译之前,替换或添加文本

5. 关于头文件,C的头文件都是带.h的,cpp头文件不带任何拓展名

6. 这一节的一个小重点来了,名空间namespace

名空间的出现是为了是不同版本、不同来源的同名函数或者变量可用

例如using namespace std,使得整个std可用,但这是一个偷懒做法,可能成为大型项目的隐患

using std::cout,使得具体名称可用

名空间定义方式:

namespace xxx {

  ...

}

7. white space: 空格、制表符、回车

2.2 语句

1. 为什么要变量声明?防止程序员在不知情的情况下创建新的变量

int carrots;

2. 赋值语句,赋值是自右向左

a=b=c=1;

cin, cout的使用是常规操作了,略去。

3. 类简介

1. 类是OOP(面向对象编程)的核心概念之一。

2. 类是用户定义的一种数据结构。

3. 类是对一种数据类型的全部属性(成员+操作)的描述,对象是根据这些描述创造的实体。

cout是一个ostream类对象,cin是一个istream类对象

2.3 函数

这里只是介绍函数的基本特性

函数有函数头、函数体、函数原型(prototype)、返回值、参数等等

using namespace std可以放在函数定义前,作用于文件中所有函数;也可以放在特定函数中,作用于当前函数

让程序能访问名空间的方法有四种

1. using namespace 全局

2. using namespace 局部

3. using std:cout(举例)

4. std:cout

2.4 总结 & 复习题

1. 语句有:

声明、赋值、消息、函数调用、函数原型、返回

消息就是发送消息给对象,一种是使用类方法(本质函数调用),还有一种就是重新定义运算符

2. 复习题

太简单了没什么好说的……

2020.07.15 20:51更新

==================================================================================================================

第三章 处理数据

这一章有一句话很关键,建议记住:面向对象编程的本质是设计并拓展自己的数据类型。

这一章介绍基本类型,下一章介绍复合类型。

3.1 简单变量

整型

short、int、long和long long

这部分我个人觉得没什么好整理的,看看书过去吧。

3.2 const限定符

const变量必须在声明时提供值,否则该常量的值将是不确定的,且无法修改。

相比define,const的优点有三

1. 明确指定类型

2. 可以将定义限制在特定的函数或文件中

3. 可以将const用于更复杂的类型(数组,结构等)

3.3 浮点数

浮点类型有float,double,long double

浮点数的优点:

1. 可以表示整数之间的值

2. 由于有缩放因子,他们表示的范围比整数大得多

缺点:

1. 浮点运算速度比整数慢

2. 精度将降低

3.4 C++算术运算符

整理一下这里的类型转换吧。

一共有5种类型转换。

1. 初始化和赋值进行的转换

较大浮点数类型转为较小的浮点数类型会有精度损失

浮点类型转为整形会有导致小数部分丢失,同时原来的值超过目标类型的取值范围的话,结果呢将是不确定的

较大的整形转为较小的整形,原来的值超过目标类型的取值范围,通常只复制右边的字节

2. 以{ }方式初始化是进行的转换

列表初始化。

这是一种更加严格的转换,不允许缩窄,即变量的类型可能无法表示赋给它的值。

例如不允许将浮点数转换为整型。

const int code = 66;

int x = 66;

char c {code}; //ok!

char d {x}; //no!!

在编译器看来,x是一个变量,值可能很大,所以不允许这种转换。

3. 表达式中的转换

自动转换:C++在计算表达式时,将bool、char、unsigned char、signed char、short值转为int,这些转换被称为整型提升

如果short跟int长度相同,那么unsigned short会被转换成unsigned int,确保没有数据损失。

4. 参数传递时的转换

5. 强制类型转换

“强制类型转换有过多的可能性而极其危险。”

3.5 总结 & 复习题

略。

==============================================================================================================

第四章 复合类型

4.1 数组

1. 只有在定义数组时才能初始化,不能将一个数组赋给另一个数组(所以数组有点像一个指针常量)

int cards[4] = {0, 1, 2, 3}; //ok

int hand[4]; //ok

hand[4] = {5, 6, 7, 8}; //not allowed!

hand = cards; //not allowed!

2. {}为空,就是把数组所有元素都设置为0

3. 列表初始化禁止缩窄转换(缩窄转换在第三章介绍过)

4.2 字符串 & string类简介

C-风格字符串

 拼接字符串:任何空白分割的字符串都会自动拼接

cin使用空白来确定字符串的结束位置,这意味着cin读取的字符串不能包含空白

输入字符串可能比目标数组长,比如30个字符的字符串放进20个字符的数组中

顺便记录一个非常有意思的结果(与本节主题无关)

int num;

cin>>num;

上面这段代码意思很简单。如果我在终端输入的不是整数,那么num的值是多少?0

但是如果是因为某些错误异常中断输入,那么num的值将是随机的。

4.3 结构简介

4.4 共用体

4.5 枚举

4.6 指针和自由存储空间

4.7 指针、数组和指针算术

4.9 类型组合

4.10 数组的替代品

4.11 总结 & 复习题

==================================================================================================================

本打算边复习边写博客,奈何考试的时间太紧了,暑假剩下的时间不够我兼顾复习+刷书+写博客,因此此项目无限期搁置,或许有一天我重新刷起本书会继续更新的。

posted @ 2020-07-15 15:02  BugWritt3r  阅读(157)  评论(0)    收藏  举报