第2章 开始学习C++
2.1 进入C++
#include <iostream>
int main()
{
using namespace std;
cout << "Hello";
cout << endl;
cout << "World";
return 0;
}
- 这个代码可能一闪而逝,要让其停住可以在return前加cin.get(),有些需要添加两个这个。
- C++可以使用C语言中的输入输出,只需要包含stdio.h头文件就行。但C++有自己的输入输出体系,并在C的基础上做了很多改进,应该使用C++特有的输入输出。
2.1.1 main()函数
2.1.2 C++注释
- C++注释以//开头,注释一行,也沿用了C风格的注释/* */。
2.1.3 C++预处理器和iostream文件
- C++和C语言一样也使用一个预处理器,该程序在进行主编译前对源文件进行处理。
- 对于#include <iostream>;这条语句,会导致预编译器将iostream文件的内容添加到程序中,这是一种典型的预处理器操作:在源代码被编译前,替换或添加文本。
- iostream文件的内容将被取代程序中的#include <iostream>,原始文件没有被修改,而是将源代码和iostream组合成了一个复合文件,编译的下一阶段将使用该文件。
2.1.4 头文件名
- 像iostream这样的文件叫做包含文件,因为他们被包含在其他文件中,也叫头文件,因为他们被包含在文件的起始处。
- C语言的风格是头文件使用.h后缀,C++头文件没有扩展名。C头文件被转换为C++文件,这些文件被重新命名,去掉了.h后缀名,前面加c,如math.h文件在C++中为cmath。
2.1.5 名称空间
- 使用C++的iostream而不是使用iostream.h则应该使用using namespace std。表示使用名称空间std。
- 名称空间是C++的一项特性,旨在解决函数重名问题。当多厂商代码合并时,可能会由于重名函数导致冲突。不同名称空间可以定义相同名字的函数,他们互不冲突。
2.1.6 使用cout进行C++输出
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
- <<是插入运算符,表示该语句把这个字符串发送给cout,该符号指示了信息流动的路径。cout是一个预定义对象。
- 输出是一个流,即从程序流出的一系列字符串。
- <<插入运算符看上去和左移运算符相同,这是一个运算符重载的例子。
- endl比欧式重起一行,C++中也可以使用另外一种,即C语言符号\n。
2.2 C++语句
2.2.1 声明语句与变量
int carrots;
- 上面语句提供了两项信息:需要的内存以及该内存单元的名称。int是数据类型,声明时表示需要int数据类型那么大的内存给变量,通过使用carrots这个变量名就能够访问内存中存储的值。在C++中,所有使用的变量都必须声明。
- 程序中的声明语句叫做定义声明,简称定义,这意味着他将导致编译器为变量分配内存空间。
- C中通常声明放在函数开始的地方,C++通常是使用前声明他。
2.2.2 赋值语句
carrots = 25;
- 上面变量声明之后,可以将值赋值给储存单元。
- C++和C不同的地方是,可以连续使用赋值运算符。
int num1;
int num2;
num1 = num2 = 25;
2.2.3 cout的新花样
#include <iostream>
using namespace std;
int main() {
int carrots = 25;
cout << carrots << endl;
return 0;
}
- cout还可以用于输出数字,这是因为在打印之前,cout会将整数形式的数字转换成字符串形式。
- C++的插入运算符会根据其后的数据类型相应的调整其行为,这是一个运算符重载的例子。
2.3 其他C++ 语句
- 输出时,<<将字符串插入到流中,输入时,cin使用>>运算符从流中抽取字符。
- 类是用户定义的一种数据类型,要定义类,需要描述它能够表示什么信息和可对数据执行哪种行为。
- 类有类库,像ostream和istream,从技术上来说,他们并没有被内置到C++语言中,而是语言标准指定的类。
2.4 函数
- 在使用函数前,C++编译器必须知道函数的参数类型和返回值类型。否则编译器不知道如何编译,C++提供这种信息的方式是使用函数原型。
- C++程序应当为程序中使用的每个函数提供原型。
- 在使用函数时,也必须提供原型,有两种方式,一种是在源代码中输入函数原型,第二种是包含定义有原型的头文件。