C++语言学习笔记

写在开头

以找工作为目的的学习记录,虽然只打算自己看,但还是要做到两点:

  1. 尽可能保证好的文字质量。

  2. 不要在形式上花太多时间。

参考书: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 一些收获

  1. 弄清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对变量初始化了。

  2. 使用std::cin >> var作为判断条件

    在英文原版书第一章p15,接收数量不确定的输入当中,根据书上的代码进行编译,发现按回车以后程序并不会停止运行,而是要按下ctrl+d才会结束并且返回。
    这就是程序正确的运行逻辑,因为std::cin >> var这个expression的值是std::cin当前的状态(valid或者invalid),只有读到end-of-file(文件结束符)或者是读到错误的输入才会变成invalid。
    而在Unix下输入end-of-file是用ctrl+d的组合按键实现的。

  3. 关于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,可以像书上预想的结果一样正确运行,这是为什么呢?

  4. 重新认识头文件

    想要用库,就需要包含头文件(header),例如#include <iostream>,尖括号里面放的东西就叫头文件。

    头文件(header)一般用.h作为后缀,但是标准库的头文件一般没有后缀。

    标准库的头文件用<>包围,标准库以外的头文件用""包围。

  5. 重新认识类

    类的作用是提供了一种数据类型(type)(这个数据类型的名字和类名是一样的),以及这种数据类型可以进行的操作(operations)。

    类一般定义在相应的头文件里,因此想要使用一个类需要先包含定义这个类的头文件。

    dot运算符(.)只适用于class type的对象,左边必须是类的一个对象,右边必须是一个成员的名字,dot运算符的结果是成员。

  6. 初始化!初始化!初始化!

    class type的变量如果没有初始化,会默认使用类内定义的初始化。

    但是定义在函数内部的内置类型变量是默认没有初始化的,这很容易导致bug,所以一定要记得初始化!


Chapter2 Variables and Basic Types

待续…