C++语言学习笔记
写在开头
以找工作为目的的学习记录,虽然只打算自己看,但还是要做到两点:
尽可能保证好的文字质量。
不要在形式上花太多时间。
参考书:C++ Primer(5th edition)以及对应的中文翻译版本。
学习方法
书是好书,但是目前只能重点看一部分内容,应试学习,找到工作以后自我提升再细致学习。
每一章结尾部分有chapter summary(本章小结)和defined terms(术语表),学完一章一定要看!用来做检查自己学习效果的checklist。
- 读书小人儿标记:这是C++基础和核心,重点读
- 一堆书标记:高级主题/特殊目的主题,跳过或者浏览,用到再学
- 放大镜小人儿标记:这是比较复杂的概念,但是对于理解C++语言特别重要,重点读
C++ Primer(5th edition)内容概览
- 第1部分(C++基础)和第2部分(C++标准库)(1到12章)是必须学的基础内容
- 第3部分讲怎么写类(13到16章)
- 第4部分讲用于构建大型复杂系统的更高级的话题(17到19章)
Chapter1 Getting Started 一些收获
弄清statement和expression、parameter和argument、declaration和definition的概念
函数体用
{}
括住a block of statements(语句)。一个block是0个或者多个statement的序列,而block本身也是一个statement。注意statement和expression的区别,expression一定是有值的。
In C++ an expression(表达式) yields a result and is composed of one or more operands(操作对象) and (usually) an operator(运算符).
parameter指的是函数定义里写的括号里面那些名字,argument指的是调用函数的时候传给函数的具体值。
declaration是声明变量,只分配了内存,没有初始化,而definition对变量初始化了。
使用
std::cin >> var
作为判断条件在英文原版书第一章p15,接收数量不确定的输入当中,根据书上的代码进行编译,发现按回车以后程序并不会停止运行,而是要按下ctrl+d才会结束并且返回。
这就是程序正确的运行逻辑,因为std::cin >> var
这个expression的值是std::cin
当前的状态(valid或者invalid),只有读到end-of-file(文件结束符)或者是读到错误的输入才会变成invalid。
而在Unix下输入end-of-file是用ctrl+d的组合按键实现的。关于Unix下的end-of-file
chapter1.4.4的程序编译(命名为count)运行,输入”1空格2空格3紧接着ctrl+d”,会在输出一行1的计数情况之后阻塞,如果输入”1空格2空格3空格然后ctrl+d”,会在输出两行统计情况之后阻塞,但如果把”1 2 3”写进文本文件data,然后cat data | ./count,可以像书上预想的结果一样正确运行,这是为什么呢?
重新认识头文件
想要用库,就需要包含头文件(header),例如
#include <iostream>
,尖括号里面放的东西就叫头文件。头文件(header)一般用
.h
作为后缀,但是标准库的头文件一般没有后缀。标准库的头文件用
<>
包围,标准库以外的头文件用""
包围。重新认识类
类的作用是提供了一种数据类型(type)(这个数据类型的名字和类名是一样的),以及这种数据类型可以进行的操作(operations)。
类一般定义在相应的头文件里,因此想要使用一个类需要先包含定义这个类的头文件。
dot运算符(
.
)只适用于class type的对象,左边必须是类的一个对象,右边必须是一个成员的名字,dot运算符的结果是成员。初始化!初始化!初始化!
class type的变量如果没有初始化,会默认使用类内定义的初始化。
但是定义在函数内部的内置类型变量是默认没有初始化的,这很容易导致bug,所以一定要记得初始化!
Chapter2 Variables and Basic Types
待续…