第一章 开始
1.1 编写一个简单的C++程序
main函数的返回类型必须为int。
返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。
编译、运行程序:
如何编译程序依赖于操作系统和编译器。
在不同操作和编译器系统中,运行C++编译器的命令也各不相同。最常用的编译器是GNU编译器和微软Visual Studio编译器。
GNU:如果指定可执行文件的文件名,UNIX系统没有后缀,Windows系统后缀为exe;
如果未指定可执行文件的文件名,UNIX系统为a.out,Windows系统为a.exe。
*Windows运行可执行文件时,后缀可以忽略。
编译器的一部分工作是寻找程序文本中的错误:1、语法错误;2、类型错误;3、声明错误。两种常见的声明错误是:对来自标准库的名字忘记使用std::、标识符名字拼写错误。
编辑—编译—调试
访问mian的返回值:
Windows:$ echo %ERRORLEVEL%
Unix:$ echo $?
1.2 初始输入输出
标准输入:cin
标准输出:cout、cerr、clog
程序员常常在调试时添加打印语句,这类语句应该保证一直“刷新流”。否则,如果程序崩溃,输出可能还留在缓冲区中,从而导致关于程序崩溃位置的错误推断。
标准库定义的所有名字都在命名空间std中。
标准库定义了不同版本的输入输出运算符,来处理不同类型的运算对象。
1.3 注释简介
C++有两种注释:单行注释和界定符对注释
注释界定符不能嵌套
注释代码最好的方式是用单行注释方式注释掉代码段的每一行
1.4 控制流
1.4.1 while
1.4.2 for 循环头由三个部分组成:初始化语句、循环条件、表达式,表达式在for循环体之后执行。
1.4.3 读取数量不定的输入数据
int sum = 0, value = 0;
while(std::cin >> value) {
sum += value;
}
std::cout << "Sum is: " << sum << std::endl;
此循环条件实际上检测的是std::cin。当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时(如不同类型),istream的状态就会变为无效。
当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。
Windows:输入文件结束符的方法是敲Ctrl+Z,然后按Enter或Return键;
UNIX:文件结束符输入是用Ctrl+D。
1.4.4 if
1.5 类简介
我们通过定义一个类来定义自己的数据结构。一个类定义了一个类型,以及与其关联的一组操作。
包含来自标准库的头文件时,应该用尖括号(<>)包围头文件名,标准库头文件通常不带后缀;对于不属于标准库的头文件,则用双引号("")包围。
文件重定向。
术语:
赋值:抹去一个对象的当前值,用一个新值取代之。
初始化:在一个对象创建的时候赋予它一个值。
库类型:标准库定义的类型。
操纵符:如std::endl,在读写流的时候用来操纵“流”本身。
头文件:使类或其他名字的定义可被多个程序使用的一种机制。
源文件:包含C++程序的文件。
函数:具名的计算单元。
变量:具名对象。
未初始化的变量:未赋予初值的变量。类类型的变量如果未指定初值,则按类定义指定的方式进行初始化。定义在函数内部的内置类型变量默认是不初始化的,除非有显式的初始化语句。(这句话如何理解:如果想自己调试看,不同的编译器有不同的结果,程序定义变量的方式就是在内存中选一段大小为 sizeof xx 的内存,局部变量的值取决于这块内存,有点编译器会初始化成0,这跟标准无关)。试图使用一个未初始化变量的值是错误的,未初始化变量是bug的常见原因。