第2章 开始学习C++
2.1 进入C++
本节的主要任务:理解下面的代码
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!";
cout << endl;
cout << "GREAT" << endl;
return 0;
}
2.1.1 main()函数
①main函数头int描述的是main()和操作系统之间的接口
在C++中,main()函数的主流写法为.int main(void)
明确指出不接受任何参数
在C中,如果写成main(),即省略返回值,则默认返回值是int,省略说明是否接受参数意味着对是否接受参数保持沉默,而在C++中省略返回值,不行,省略说明是否接受参数,会存在移植性问题
②在C++中,如果main()函数末尾没有return 0; 程序会隐含加上
③有的程序可以没有main()函数,比如在Windows编程中可以编写一个动态链接库(DLL)模块,这是其他Windows程序可以使用的代码,不需要main()
2.1.2 C++预处理器和iostream文件
如果程序要使用C++输入输出工具,需要码
#include <iostream>
using namespace std;
c++和C一样,都拥有程序开始前自动调用的预处理器,预处理器识别编译指令#include,把iostream文件的内容添加到程序中。
因为C++的输入输出方案涉及iostream文件中的多个定义
#inlcude 编译指令导致iostream文件中的内容随源代码文件一起被发送到编译器,实际上iostream文件中的内容将取代程序中的代码行#include ,原始文件没有被修改,而是将源代码文件和iostream文件组合成一个复合文件,编译的下一个阶段将使用该文件-------------懂了!!
#inlcude 编译指令,将程序和外部世界联系起来
2.1.3 头文件名
四种头文件名及解释
C++旧式风格 以.h结尾 iostream.h C++程序可以使用(没有名空间,直接用cin, cout就行)
C旧式风格 以.h结尾 math.h C和C++都能用
C++新式风格 没有扩展名 iostream C++可用,可以使用名空间来简化代码
由C转换来的C++风格 加上前缀c,没有扩展名 cmath C++可用,**可以使用名空间**
使用名称空间的好处下面说
2.1.4 名称空间
名称空间支持,旨在让我们在编写大型程序时,以及在将多个厂商的代码组合在一起时更容易,有助于组织程序
因为在组织许多程序时,可能多个程序中都使用的相同的函数名,变量名等,这样调用起来就会出现歧义,名称空间的作用,就是让他们各回各家,各找各妈!
但是,比较麻烦的是,在引用某个都使用过的变量名或函数名是,必须注明妈妈是谁(这是谁家孩子),比如Mike::cout << “This is my dear son, baby!”,这个“Mike::”写起来比较麻烦,
这时编译命令using,就发威了 using spacename std 之后,就可以省略妈妈(好像是MIKE爸爸,哈哈)
using spacename std 作用是使得std名称空间中所有的名称都可直接用
还可以只让我们用到的那些名称直接用比如
using std::cin
using str::cout
2.1.5 使用ocut进行C++输出
①
cout << "Hello World!";
<<指明了信息的流动途径
对C++来说,输出是一个流,即程序流出的一系列字符,cout是一个预定义对象,cout对象就表示这种流,其属性是在iostream文件中定义的,既然是对象,就有一个类,cout也不例外,cout的类规定了数据的存储和适用方式。
怎么使用呢?<<在这里就表示插入运算符,这个操作可以把<<右边的信息插入到流中
②运算重载符
<<可以表示插入运算符,也是C总的按位左移运算符,编译器可以根据上下文的指令来判断其含义,C++在这方面的特殊之处是,扩展了运算符重载的概念,允许为用户定义的类型重新定义运算符的含义
③cout << endl 几乎等价于 cout << “\n”
endl就是一个在头文件iostream被定义的特殊符号,且位于名空间std中
区别是(我也不太懂) endl可以将其立即显示在屏幕上,\n不能提供这样的保证
2.2 C++语句
2.2.1 cout与printf
cout相对于printf的聪明之处在于,不需要格式说明符%d,%s等,就可以得到我们想要的输出
2.2.2 cin
cin >> carrots
C++将输入看做流入程序的字符流,iostream文件将cin定义为一个表示这种流的对象,输入时,cin使用>>运算符从输入流中抽取字符。通常,需要在运算符右侧提供一个变量,以接收抽取的信息
2.2.3 类简介
类描述指定了可对类对象执行的所有操作,要对特定的对象执行这些允许的操作,需要给该对象发送一条消息,C++提供了两种发送消息的方式:一种是使用类方法(本质上就是函数调用);另一种方式是重新定义运算符,cin,cout就是采用这种方式,利用重新定义的>> 或<<将“接收消息”和“显示消息”发送给cin/cout
2.3 函数
2.3.1 函数原型和函数定义
①在程序中使用某个函数时,如sqrt(),需要提供函数原型,提供函数原型有两种方式,一是在源代码文件中输入函数原型,而是包含头文件cmath
函数原型只描述函数接口,而定义中包含了函数的代码,C++和C将这两项特性分开了,库文件包含了函数的编译代码,头文件包含了函数原型
即,调用C++库函数,需要用头文件来提供函数原型,在编译器编译程序时,编译器要在库文件中搜索使用的函数才行。
但是自动搜索哪些库文件,会因编译器而异,包含头文件可以提供原型,却不一定会使编译器搜索正确的库文件,所以有可能出现搜索不到的情景,这时就百度好了
②关键字
在不使用cin的程序中,可以把cin作为变量名
③当前比较好的做法是只让需要访问名称空间的函数访问名称空间,即在函数内部开头用using namespace std, 偷懒的做法是在程序开头这样用