《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 总结 & 复习题
==================================================================================================================
本打算边复习边写博客,奈何考试的时间太紧了,暑假剩下的时间不够我兼顾复习+刷书+写博客,因此此项目无限期搁置,或许有一天我重新刷起本书会继续更新的。
《C++ Primer Plus》啃书计 第1~4章的更多相关文章
- PHP&MySQL(二)——困也得啃书
madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ...
- 一起来啃书——PHP看书
形式所迫,不得不开展android的学习,PHP这边也开始了啃书的日子.两部500+的书,45天够不,有点忙有点忙... 早上的胃胀,简直是一记闷棍,长点儿记性吧........ 1.PHP+MYSQ ...
- [啃书] 第3篇 - 结构体及其操作/浮点数&圆周率/复杂度/测试
啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 前言 本篇总结自<算法笔记>2.8-2.10 正文 知识点1:结构 ...
- [啃书] 第1篇 - 输入输出/变量类型/math函数
啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 说在前面 一直想刷算法找不到很适合的书,后来发现考PAT很多推荐<算法笔 ...
- c++ primer plus 第6版 部分三 9章 - 章
c++ primer plus 第6版 部分三 9章 - 章 第9章 内存模型和名称空间 1.单独编译 ...
- c++ primer plus 第6版 部分二 5- 8章
---恢复内容开始--- c++ primer plus 第6版 部分二 5- 章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...
- c++ primer plus 第6版 部分一 1-4章
c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c cc cxx C cpp ...
- 《C++Primer》第五版习题答案--第一章【学习笔记】
C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...
- 《C++Primer》第五版习题答案--第二章【学习笔记】
C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...
随机推荐
- 吃透论文——推荐算法不可不看的DeepFM模型
大家好,我们今天继续来剖析一些推荐广告领域的论文. 今天选择的这篇叫做DeepFM: A Factorization-Machine based Neural Network for CTR Pred ...
- “500 oops socket” Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)【成功完美简单极致】
"500 oops socket" Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)[成功完美简单极致] #自 ...
- node.js常用内置模块一
在使用内模块的时候需要先将所需的内置模块进行引入. OS模块 在nodejs中OS模块提供了与操作系统相关的属性和方法 // 导入OS内置模块,必须先进行导入,否则无法使用 const os = re ...
- LeetCode108 将有序数组转为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...
- SpringCloud Alibaba Nacos服务注册与配置管理
Nacos SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos:Dynamic Naming and Configurat ...
- 【译】Async/Await(一)——多任务
原文标题:Async/Await 原文链接:https://os.phil-opp.com/async-await/#multitasking 公众号: Rust 碎碎念 翻译 by: Praying ...
- python optparse模块的用法
引用原博主文章链接: https://www.cnblogs.com/darkpig/p/5717902.html
- [Usaco2008 Mar]River Crossing渡河问题
题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...
- 浅谈JavaScript代码性能优化2
一.减少判断层级 从下图代码中可以明显看出,同样的效果判断层级的减少可以优化性能 二.减少作用域链查找层级 简单解释下,下图中第一个运行foo函数,bar函数内打印name,bar作用域内没有name ...
- CentOS对接GlusterFS
存储节点部署示例环境,仅供参考 主机名 IP 系统 gfs01 10.10.10.13 CentOS 7.4.1708 gfs02 10.10.10.14 CentOS 7.4.1708 一.Glus ...