C++ Primer Plus 学习笔记
第 2 章 开始学习C++
进入 C++
C++ 注释
C++注释都以双斜杠//
打头,到行尾结束。
C-风格注释包括在符号/*
和*/
之间,可以跨越多行。
C++也能识别C注释,但应尽量使用C++注释,因为不涉及结尾符号和起始符号的正确配对。
C++对大小敏感
如果程序运行完毕自动关闭,可在retrun
前添加如下语句:
cin.get(); \\有时需要两条这样的语句
在C++中,每条完整的指令都称为语句,所有的语句都以分号结束。
int main() \\C++经典函数头,通常必须包含
int main(void) \\void明确指出,函数不接受参数。C++中,括号为空与在括号中使用void等效。
void main() \\不是标准强制的一个选项,在有些系统上不能工作
如果编译器到达main()
函数末尾没有遇到返回语句,则认为main()
函数以如下语句结尾:
return 0;
此条隐含的返回语句只适用于main()
函数,而不适用于其他函数。
#include <iostream> \\该编译指令导致预处理器将iostream文件内容添加到程序中,在被编译前。
头文件命名约定
头文件类型 | 约定 | 示例 | 说明 |
---|---|---|---|
C++旧式风格 | 以.h结尾 | iostream.h | C++程序可用 |
C旧式风格 | 以.h结尾 | math.h | C、C++程可用 |
C++新式风格 | 没有扩展名 | iostream | C++程序可用,使用namespace std |
转换后的C | 加上前缀c,没有扩展名 | cmath | C++程序可用,可以使用不是C的特性,如namespace std |
名称空间支持是C++特性。类、函数和变量便是C++编译器的标准组件,都被放置在名称空间std
中。仅当头文件没有扩展名.h时,情况才是如此。
using namespace std; \\using编译指令,表明可以使用std名称空间中定义的名称,而不必使用std::前缀。
更好的方法是,只使用所需的名称可用:
using std::cout;
using std::cin;
using std::endl;
cout << string; \\输出是一个流,即从程序流出的一系列字符,cout对象表示这种流,其属性是在iostream文件中定义的。cout的对象属性包括一个插入运算符(<<),它可以将右侧的信息插入到流中。
cout << endl; \\重起一行,在iostream中定义,且位于名称空间std中。另一种换行的旧式方法:C语言符号\n
cin >> variable; \\cin使用>>运算符从输入流中抽取字符。
一行代码中不可分割的元素叫做标记(token),通常用空格,制表符或回车符将两标记分开。
用空格、制表符或回车符统称为空白(white space)。
有些字符(如括号或逗号)是不需要用空白分开的标记。
C++ 源代码风格
- 每条语句占一行
- 每个函数都有一个开始花括号和一个结束花括号,并各占一行
- 函数中的语句都相对于花括号进行缩进
- 与函数名称相关的圆括号周围没有空白
C++中,所有的变量者必须声明。
符号=
叫做赋值运算符,C++(和C)可以连续使用赋值运算符。
C++插入运算符<<
将根据其后的数据类型调整cout
行为,这是一个运算符重载的例子。
类简介
类是用户定义的一种数据类型。要定义类,需要描述它能够表示什么信息和可对数据执行哪些操作。
类之于对象就像类型之于变量。类定义描述的数据格式及其用法,对象则是根据数据格式规范创建的实体。
C++类对应于某些语言中的对象类型,而C++对象对应于对象实例或实例变量。
类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。
cout
是一个ostream
类对象。ostream
类定义(在iostream
中定义)描述了ostream
对象表示的数据以及可对它执行的操作,如将数字或字符串插入到输出流中。
cin
是一个istream
类对象,也是在iostream
中定义。
函数来自函数库,类来自类库。
要对特定对象执行允许的操作,需要给对象发送一条消息。C++提供了两种发送消息的方式:一种方式是使用类方法,另一种方式是重新定义运算符(cout和cin采用此方式)。
函数
C++程序应当为程序中使用的每个函数提供原型。编译器必须知道函数的返回值类型和参数类型。
函数原型之于函数就像变量声明之于变量——指出涉及的类型。
原型结尾必须有一个分号,表明它是一条语句,而不是一个函数头。如果无分号,编译器将解释为函数头,并要求提供函数体。
可在源代码文件中输入函数原型,或在头文件中定义原型。
对于C++库中的每个函数,都在一个或多个头文件中提供了其原型。
原型只描述函数接口,而定义中包含了函数的代码。
C和C++将库函数的原型和定义分开了,库文件中包含了函数的编译代码,而头文件中则包含了原型。
库函数使用前必须提供原型,通常把原型放在main()
定义之前。自定义新函数的源代码,可以放在main()
的后面。
C++不允许将函数定义嵌套在另一个函数定义中。
main
不是关键字。
在多函数程序中使用using编译指令
只让需要访问名称空间std
的函数访问它是更好的选择。
让程序访问名称空间std的方法有多种,下面是其中四种
- 将
using namespace std;
放在特定函数定义中,让该函数可使用名称空间std
中的所有元素 - 将
using namespace std;
放在函数定义之前,让文件中所有函数都可使用名称空间std
中的所有元素 - 在特定函数中使用类似
using std::cout;
这样的编译指令,以使用特定元素 - 完全不使用编译指令
using
,而在需要时使用前缀std::
,如std::cout
,std::endl
第 2 章总结
C++程序由一个或多个函数模块组成。程序从main()
函数开始。函数由函数头和函数体组成。
函数头指出函数的返回值(如果有的话)的类型和函数期望通过参数传递给它的信息的类型。
函数体由一系列位于花括号{}中的C++语句组成。
有多种类型的C++语句,包括下述六种:
- 声明语句:定义函数中使用的变量的名称和类型
- 赋值语句:使用赋值运算符=给变量赋值
- 消息语句:将消息发给对象,激发某种行动
- 函数调用:执行函数,结束后返回函数调用语句后的语句
- 函数声明:声明函数的返回类型、函数接受的参数数量和类型
- 返回语句:将一个值从被调用函数返回到调用函数中
类是用户定义的数据类型规范,它详细描述了如何表示信息和可对数据执行的操作。
对象是根据类规范创建的实体,就象简单变量是根据数据类型描述创建的实体一样。
C++提供了两个用于处理输入和输出的预定义对象cout
和cin
,它们是istream
和ostream
类的实例,在iostream
文件中定义。
插入运算符<<
将数据插入到输出流,抽取运算符>>
从输入流抽取信息。
cout
和cin
都是智能,能够根据程序上下文自动将信息从一种形式转换为另一种形式。
C++可以使用大量的C库函数。要使用库函数,应当包含提供该函数原型的头文件。