因为作者本人以前就在使用C++,虽然基础不够扎实,但是对一些基础的知识还是有一些了解和应用的。为了查缺补漏,对于基础C++的知识会较快速的掠过,以前漏掉的知识点会在本章节中记录整理,已经熟悉的知识就不再赘述了。
注意:
1、C++也能够使用printf()、scanf()和其他所有标准C输入和输出函数,只需要包含常规C语言的stdio.h文件。但是,在以后的C++学习中我们应该注意,我们应该尽量c语言的原有应用影响,用C++的工具实现自己的代码。
2、C++源文件的文件名可以用.C或.cxx表示,C语言是小写的.c,注意区别。
3、关于注释:C++的注释为//打头,c语言的注释为/* */。现在在C++程序中这两种注释形式都可以使用,但是要注意尽量使用C++注释,因为这不涉及到结尾符号和起始符号的正确配对问题,所以产生问题的可能性很小。
4、在头文件的扩展名中,C++的头文件风格有一些改变,去掉了.h的扩展名,并在文件名前加上c。例如:在C语言中,数学运算头文件为“cmath.h”,新式的C++头文件为“cmath”。
5、名称空间的使用:在使用去掉.h的头文件时,因为此C++头文件中包含了命名空间的定义,因此,要使用using namespace std声明命名空间。
关于名称空间的介绍:名称空间的支持是一项新的C++特性,旨在让用户编写大型程序的时候便于将几个厂商的代码程序更容易组织在一起。举个例子来说,两个公司Microflop和Piscine提供的代码中都有函数wanda(),如果我们的程序同时需要用到两个厂商的这个函数,那么编译器就不知道使用wanda()函数指的是哪个版本了。名称空间让厂商可以将其产品封装在一个叫做名称空间的单元中,这样就可以用名称空间的名称来指出想使用哪个厂商的产品了。因此,Microflop可以将其wanda()函数定义在一个名为Microflop的命名空间中,这样,其wanda()函数全称为Microflop::wanda(),同样,Piscine公司的wanda()版本可以表示为Piscine::wanda()。这样,程序就可以使用命名空间来区分不同的版本的函数了。所以,像类、函数和变量这些编译器的标准组件,都被放置在名称空间std中,所以事先声明using namespace std;
但是在使用命名空间时需要注意:using namespace std编译指令使得std名称空间中所有名称都可用。这是一种偷懒的做法,对于简单的程序中,可能只涉及到一个命名空间或者命名空间中没有重复的函数时,不会有影响。但是,在大型项目中,使用using指令后就无法区分开两种不同空间的相同函数了,所以慎用。更好的方法是只使所需的名称可用,如果我只用到cout和cin,那就通过using声明实现:using std::cout; using std::endl: using std::cin。或者直接在程序中用到函数时直接声明函数的来源,如std::cout。
6、C++源代码风格:
每条语句占一行;每个函数都有一个开始花括号和一个结束花括号,这两个花括号各占一行;函数中的语句都相对于花括号进行缩进;与函数名称相关的圆括号周围没有空白。前三条规则是为了使代码清晰易读,第四条规则帮助区分函数和一些也使用圆括号的C++内置结构(如循环)。
7、cout的输出功能
要知道,整数存储25和字符存储25是不同的,字符存储中,25就是书写该数字时使用的字符,即2和5。程序在内部存储器中存储的就是2和5的编码。要打印字符串,cout只需打印字符串中的各个字符即可。但是整数25被存储为数值,计算机不是单独存储的每个数字,而是将25存储为二进制数。打印之前,cout必须将整数形式转换为字符串形式。
与老式的C语言相比cout更加聪明了。在C语言中,要打印字符串“25”和整数25可以使用C语言的多功能输出函数printf():
printf("Printing a string: %s\n","25");
printf("Printing ainteger: %d\n",25);
这样每次必须指出打印的类型,很容易出错。cout就可以智能的将各种类型的数据转换为字符串形式再输出。实际上C++插入运算符(《)将根据其后的数据类型相应的调整其行为,这涉及到运算符重载的例子。所以,以后涉及到打印输出,尽量使用cout而不是printf。