《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 总结 & 复习题

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

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

《C++ Primer Plus》啃书计 第1~4章的更多相关文章

  1. PHP&MySQL(二)——困也得啃书

    madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ...

  2. 一起来啃书——PHP看书

    形式所迫,不得不开展android的学习,PHP这边也开始了啃书的日子.两部500+的书,45天够不,有点忙有点忙... 早上的胃胀,简直是一记闷棍,长点儿记性吧........ 1.PHP+MYSQ ...

  3. [啃书] 第3篇 - 结构体及其操作/浮点数&圆周率/复杂度/测试

    啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 前言 本篇总结自<算法笔记>2.8-2.10 正文 知识点1:结构 ...

  4. [啃书] 第1篇 - 输入输出/变量类型/math函数

    啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 说在前面 一直想刷算法找不到很适合的书,后来发现考PAT很多推荐<算法笔 ...

  5. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  6. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...

  7. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

  8. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  9. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

随机推荐

  1. CountDownLatch/CyclicBarrier/Semaphore 使用过吗

    CountDownLatch 让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒.CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调 ...

  2. 树莓派-4WD智能小车操作小结

    树莓派-4WD智能小车操作小结 树莓派4B-4WD智能小车,双层结构,第一层结构为:小车扩展板(底层)+树莓派主板,通过铜柱隔离固定,小车扩展板相当于计算机的外设扩展板:上面一层为第二层,是三个舵机承 ...

  3. Ossec 安装并配置邮件通知

    Ossec 安装并配置邮件通知 目录 Ossec 安装并配置邮件通知 1. 介绍 2. 软硬件环境 3. 安装步骤 3.1 Server 3.2 Agent 3.3 配置邮件通知 4. 参考资料 1. ...

  4. Python 日志打印之logging.getLogger源码分析

    日志打印之logging.getLogger源码分析 By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #函数说明 logging.getLogger(nam ...

  5. ctfhub技能树—信息泄露—hg泄露

    打开靶机 查看页面信息 使用dvcs-ripper工具进行处理 ./rip-hg.pl -v -u http://challenge-cf630b528f6f25e2.sandbox.ctfhub.c ...

  6. 实操|如何将 Containerd 用作 Kubernetes runtime

    日前专为开发者提供技术分享的又拍云 OpenTalk 公开课邀请了网易有道资深运维开发工程师张晋涛,直播分享<Containerd 上手实践 >,详细介绍 Containerd 的发展历程 ...

  7. SAP轻松访问会话管理器等设置

    对于SAP的登陆后初始界面,是有一个配置表,可以进行设置的,例如隐藏SAP的标准菜单,设置轻松访问页面右边的图片内容等等这一切的设置都可以通过维护SSM_CUST表来实现可以通过SM30来维护内容,该 ...

  8. spring boot 集成 websocket 实现消息主动

    来源:https://www.cnblogs.com/leigepython/p/11058902.html pom.xml 1 <?xml version="1.0" en ...

  9. SQLHelper ------ python实现

    SQLHelper ------ python实现 1.第一种: import pymysql import threading from DBUtils.PooledDB import Pooled ...

  10. Ubuntu安装记录

    好吧,这成功地让我想起了那些边肯红薯边黑苹果的早晨······ 本人纯属Windows用腻,后期请大佬多多指教 前面因为没U盘而碰壁的内容在此不说,接下来因为太兴奋,关于安装U盘制作没记录什么.最终, ...