1.1 编写一个简单的C++程序
1. main函数:操作系统通过调用main运行C++程序
2. 函数的定义包含四个部分:
- 返回类型 return type:main函数的返回类型必须为int
- 函数名 function name
- 形参列表 parameter list (可以为空)
- 函数体 function body:用花括号括起来
3. 类:定义了数据元素的内容以及在这类数据上可以进行的运算,程序处理的数据都保存在变量中,每个变量都有自己的类型。
4. 从命令行运行编译器
$ CC prog1.cc | main程序保存在prog1.cc中,CC是编译器程序的名字,$是系统提示符,编译器生成一个可执行文件,windows系统将这个可执行文件命名为prog1.exe |
$ prog1 | 在windows系统中运行一个可执行文件(忽略了后缀.exe) |
$ .\prog1 | 指出文件在当前目录中 |
$ echo %ERRORLEVEL% | 访问main的返回值 |
GNU编译器:
$ g++ -o prog prog1.cc
g++是运行GNU编译器的命令,-o prog1是编译器参数制定了可执行文件的文件名
1.2 初识输入输出
C++语言没有定义任何输入输出(IO)的语句,而是包含了一个全面的标准库提供IO机制(iostream库)。iostream库中包含两个基础类型istream和ostream分别表示输入流和输出流。一个流就是一个字符序列。
1. 标准输入输出对象
cin | 标准输入 |
cout | 标准输出 |
cerr | 输出警告和错误消息,也被称为标准错误 |
clog | 输出程序运行的一般性信息 |
系统通常将程序所运行的窗口和这些对象关联起来,cin时数据从程序正在运行的窗口读入,cout时数据会写入到同一个窗口。
2. 使用iostream库:# include<iostream>,其中iostream指出了一个头文件。
3. 写入:std::cout<<"......."<<std::endl;
"......":字符串字面值常量
endl:操纵符,结束当前行并且将缓冲区中的内容刷新(将程序产生的所有输出真正写入到输出流中,而不是停留在内存中等待写入流)
std::cout和std::endl的前缀std::指出cout和endl是定义在名为std的命名空间中的,命名空间namespace可以帮助避免名字定义冲突,标准库定义的所有名字都在命名空间std中。可以通过using namespace std可以避免每次通过前缀std::指出命名空间。
4. 读取:std::cin>>v1>>v2;
1.3 注释简介
单行注释:// ......
界定符:/*......*/(不能嵌套)
1.4 控制流
语句一般是顺序执行的,控制流语句可以允许写出更为复杂的执行路径。
1.4.1 while语句
while语句反复执行一段代码,直至给定的条件为假。
条件 condition
执行 statement
1.4.2 for语句
初始化语句 init-statement
循环条件 condition
表达式 expression
1.4.3 读取数量不定的输入数据
程序会一直读取数据直至没有新的输入为止 ,当遇到文件结束符或者无效输入时(不是整数)则会停止while循环。windows系统中可以通过Ctrl+Z输入文件结束符。
1.4.4 if语句
C++的缩进和格式:C++的花括号、缩进、换行符、注释很大程度上是自由的,唯一的要求是main形参列表后第一个非空、非注释的字符必须是左花括号。
常见错误:
- 语法错误 syntax error
- 类型错误 type error (将数据传到参数中时,数据类型和参数类型不一致)
- 声明错误 declaration error (每个名字都要先声明后使用)
1.5 类简介
类的使用上和内置类型(比如int)一样自然,一个类定义了一个类型以及与其关联的一组操作。以书店程序为例,假定类名为Sales_item,在头文件Sales_item.h中定义了这个类。在这节中不关心这个类如何实现,只关心类对象可以执行什么操作。
1.5.1 Sales_item类
定义Sales_item类类型的变量:Sales_item item;
调用isbn函数从一个Sales_item对象提取ISBN书号;
1.5.2 成员函数
isbn为成员函数,通常以一个类对象的名义进行调用(item.isbn())