1.1 编写一个简单程序
- 每个C++都包含一个或多个函数(function),其中一个必须命名为 main 。
- 操作系统通过调用 main 函数来运行C++程序。
- 一般函数 的定义包含:返回类型(return type)、函数名(function name)、()里的参数列表(parameter list)以及函数体(function body)
- 函数体:由 { } 与其中的语句块(block of statements)组成
- 内置类型: 指编程语言自身定义的类型
- 在C++中,大多数语句以分号(;)表示结束。而且在C++语句中的制表格、空格和回车是一样的,所以大多数语句可以不在同一行。
- 在大多数系统中,main 的返回值被用来指示状态。返回值0表明成功,非0值的含义由系统定义,通常被用来指出错误类型。
- 类型: 一种类型不仅定义了数据元素的内容,还定义了该类数据上可以执行的操作。
1.1.1编译、运行程序
- 集成开发环境(Integrated Development Environment , IDE):将代码编辑器、编译器、调试器和图形用户界面等工具包装在一起。
- 源文件(source file):存储程序源码的文件
- 对于源文件,不同的编译器 采用 不同的后缀命名约定,比如 .cc、.cxx、.cpp、.cp以及.C等。用于告诉系统这是一个C++的源文件。
- Windows与UNIX下的命令行编译:
系统 | 编译器 | 可执行文件后缀 | 命令行编译指令 | 命令行运行指令 | 获取返回值 |
---|
Windows | 微软VS | .exe | cl /EHsc prog1.cpp | prog1 | echo %ERRORLEVEL% |
UNIX | GUN | .out | g++ -o prog1 prog1.out | prog1.out ,指出文件在当前目录./a.out | echo $? |
- 其中的prog1是可执行文件的文件名。
- 如果UNIX编译指令漏了 -o prog1 ,GUN会自动生成一个名为 a.out 的可执行文件。
1.2 初识输入输出
- cin: iostream库内定义的 istream 类对象,被称为标准输入。
- cout: iostream库内定义的 ostream 类对象,被称为标准输出。
- cerr 和 clog 是iostream库内定义的两个 ostream 类内的对象。cerr 通常用于输出警告和错误信息,也被称为标准错误;而 clog 用来输出程序运行时的一般性消息。
- iostream 库内定义了两个基础类—— istream 和 ostream ,分别表示输入流和输出流。
- 流(stream): 随时间推移,字符是按顺序生成或消耗的。一个流就是一个字符序列。是从IO设备读出或写入IO设备的。
- 通过预处理器中的
#include
指令来使用头文件。但#include
指令与头文件名字必须写在同一行中。 - 表达式(expression): 它由一个或多个运算对象和运算符(0个或更多)组成。
- endl : 是一个被称为 操纵符 的特殊值。写入endl的作用是换行,并刷新与设备关联的 缓冲区(buffer) 。
- 命名空间(namespace): 可以避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。
- 标准库定义的所有名字都在命名空间 std 中。
- 通过命名空间来使用库中成员有一个副作用:必须显式地说明我们想使用来自命名空间中成员的名字。
- 可以使用 作用域运算符(::) 来指出定义在哪个命名空间的哪个成员,比如访问std中的cin对象——
std::cin
。而在3.1节中还有一种指定命名空间的方法。 - 输出运算符(<<): 接受两个运算对象,左侧 必须 是一个ostream对象,右侧则是要打印的值。可以用多个(<<)将要输出的值连接起来,合并为单一语句。该表达式的值是最左侧的ostream对象。
- 输入运算符(>>):
接受一个istream对象作为左侧运算对象,接受一个对象作为右侧运算对象。可以用多个(>>)将要输入的对象连接起来,相当于分别将输入的第一、二……个值存入第一、二……个对象中。
比如std:: cin >> v1 >> v2;
与std::cin >> v1; std::cin >> v2;
等价。又因为 输入运算符返回其左侧运算符对象作为表达式的值。 所以std:: cin >> v1 >> v2;
与(std:: cin >> v1 )>> v2;
也等价。 - 标准库(standard library)定义了不同版本的输出运算符,来处理不同类型的运算对象。
1.3 注释简介
- 注释(comments): 用于帮助他人理解程序。编译器会自动忽略注释。
- C++中注释的种类:单行注释(//)和多行注释(/**/)
- 注释界定符(/**/)不能嵌套。
/*
*注释/**/不能嵌套
*“不能嵌套”及后面的内容,编译器不会忽略,从而导致编译器报错
*/
- 单行注释后中任何内容都会被忽略
1.4 控制流
1.4.1 while语句
- while语句的格式如下:
while (condition)
statement
- 复合赋值运算符: 将左侧和右侧运算对象进行运算后,把结果赋值给左侧运算对象。比如
+=
、*=
、-=
。
1.4.2 for语句
- for语句包含两个部分:循环头和循环体
- 循环体由三个部分组成:一个初始化语句(init-statement)、一个循环条件(condition)、一个表达式(expression)。
1.4.3 读取数量不定的输入数据
- 如果是以一个istream对象作为条件,检测的就是标准输入流的状态,有效则成功,反之失败。
- 当遇到文件结束符(end-of-file,简称EOF),或遇到一个无效输入(比如输入类型不匹配),istream对象的状态会变无效。
- Windows系统中输入EOF是按Ctrl+Z,UNIX系统中输入EOF是按Ctrl+D。
1.5 类简介
- 在C++中,程序员通过定义类(class)来定义自己的数据结构(data structure)。
- 一个类定义了一种类型,与其相关的一组操作,也被称为类类型(class type)。
- 程序员自定义的头文件通常以(.h)为后缀,还有其它后缀,比如.H、.hpp或.hxx。
- C++的标准头库文件通常不带后缀,编译器一般不对头文件名的格式有要求,但有的IDE对此有要求。
- 类的作者决定类类型对象上可以使用的所有操作,比如对该类对象进行加法、赋值或输入输出运算时会发生什么事情。
- 包含来自标准库的头文件时,应该使用<>包围文件名。对于其它不属于标准库的头文件,则使用""包围。
- 大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输入与命名文件文件相关联。
- 成员函数(member function): 是定义为类的一部分的函数,有时也被称为 方法(method)。
- 通过 点运算符(.) 可调用类类型的对象中的public成员。运算结果为右侧运算对象指定的成员。