目录C+基础教程简介.3第章 C+基础知识(Basics of C+).41.1 C+程序结构(Structure of a program).51.2 变量和数据类型(Variables and Data types).91.3 常 量(Constants).181.4 操作符/运算符(Operators).22第二章控制结构和函数.392.1 控制结构(Control Structures).392.2 函数 I(Functions I).492.3 函数 II(Functions II).542.4 参数的默认值(Default values in arguments).572.5 函数重载(Overloaded functions).582.6 Inline 函数(inline functions).592.7 递归(Recursivity).602.8 函数的声明(Declaring functions).61第三章高级数据类型(Advanced Data).633.1 数 组(Arrays).633.2 字符序列(Character Sequences).703.3 指 针(Pointers).773.4 动态内存分酉已(Dynamic memory).883.5 数据结构(Data Structures).933.6 自定义数据类型(User defined data types).101第四章面向对象编程.1054.1 类(Classes).1064.2 操作符重载(Overloading operators).1174.3 类之间的关系(Relationships between classes).1244.4 多态(Polymorphism).133第五章C+高级.1415.1 模板(Templates).1415.2 名空间(Namespaces).1505.3 出 音处理(Exception handling).1555.4 类型转换高级(Advacned Class Type-casting).1595.5 预处理指令(Preprocessor Directives).164第六章C+标准函数库.169C+基础教程B e ta版原 作:Juan Soul/翻 译:Jing Xu(aqua)英文原版本教程根据Juan Soulie的英文版6+教程翻译并改编。本版为最新校对版,尚未定稿。如有不明或错误之处,请参考英文原版,并敬请在本站留言指正。版权归作者所有,欢迎链接,请勿转载。本教程对a +语言进行了深入浅出的介绍,从基础知识到A N S I+标准的最新功能,内容涵盖了从数组,类等基本概念到多态、模板等高级概念。教程本着实用的原则,每一小节都结合了可以工作的程序实例,以便读者从第一课开始就可以上手实习。本翻译版本对许多C+概念中的关键词保留了中英文对照,以便读者增强理解,并方便日后阅读英文原版教材C+基础教程简介怎样使用本教程读者范围本教程面向所有希望学习a+语言的读者。如果读者有其他编程语言背景或计算机相关基本知识可以帮助更好的理解教程内容,但这并非必须条件。对于C语言熟悉的读者可将前三章(1.1到3.4)当作复习,因为这部分内容主要介绍o+中的c部分。不过某些a+的语法与c还是有些差别,所以建议还是快速的读一下这部分。第四章讲述面向对象编程。第五章主要介绍A N S I-a+标准中的新增的功能。本教程结构教程共分6章,每章分若干小节。你可以直接从主目录进入任意小节,并循每页底部的链接向后浏览。很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一章学习之前最好先阅读这些例题,理解每行代码。学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增加新的功能。不要不敢修改这些例题程序,这正是学习的方法。兼容性备注A N S I-a+标准近几年来被接受为国际标准。尽 管a+语言从二十世纪80年代即存在,ANSI-a +在1997年才被发表,2003年又被修订过。因此很多编译器不支持ANSI-0+中的部分新功能,特别是那些在此标准发表前即被发布的编译器。在本教程中,那些A N S I-a+中新增的而老一代a+编译器大多不支持概念将备用如下标志标出:ANSI a+新增的概念同样对于c和a+在实现上有明显不同的概念,将备用如下标志标出:c与a+不同的地方编译器本教程中所有例题程序均为console程序(控制台程序)。此类程序以文本形式与用户交换信息,显K结果。所有a +编译器均支持console程序的编译。要了解更多关于如何编译的说明,请查询你的编译器用户使用手册。O+编译器和开发环境推荐很多读者询问编译器和开发环境的问题。除了常用的商用收费的MS Visual Studio,V J+,Borland O +等工具外,还有很多免费的工具也是很好用的。这里推荐两种免费的6+开发软件:1、Eclipse 的 CDT 开发工具,官方网站在 http:/www.eclipse.org/cdt/2、开源工具 Dev-O-+和 wxDev-O+第一章C+基 础 知 识(Basics of C+)1.a+程序结构Structure of a program2.变量和数据类型Variables and Data types3.常量Constants4.操作符/运算符Operators5.控制台交互Communication through console1.1 C+程序结构(Structure of a program)下面我们从一个最简单的程序入手看一个a+程序的组成结构。/my first program in C+#include using namespace std;int main()cout Hello World!;return 0;Hello World!上面左侧显示了我们的第一个程序的源代码,代码文件名称为hellowworld.cppo右边显示了程序被编译执行后的输出结果。编辑和编译一个程序的方法取决于你用的是什么编译器,根据它是否有图形化的界面及版本的不同,编译方法也有可能不同,具体请参照你所使用的编译器的使用说明。以上程序是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出Hell。World!”这句话。虽然它可能是C+可写出的最简单的程序之一,但其中已经包含了每一个J+程序的基本组成结构。下面我们就逐个分析其组成结构的每一部分:/my first program in C+这是注释行。所有以两个斜线符号()开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序作简单解释或描述的,对程序本身的运行不会产生影响。在本例中,这行注释对本程序是什么做了一个简要的描述。#include 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子#include 告诉编译器的预处理器将输入输出流的标准头文件(iostream.h)包括在本程序中。这个头文件包括了 J+中定义的基本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用到它的功能。using namespace std;J+标准函数库的所有元素都被声明在一个名空间中,这就是std名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。这条语句在使用标准函数库的a +程序中频繁出现,本教程中大部分代码例子中也将用到它.int main()这一行为主函数(main function)的起始声明。main function是所有C+程序的运行的起始点。不管它是在代码的开头,结尾还是中间-此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有O +程序都必须有一个main function.,main后面跟了一对圆括号(),表示它是一个函数。J+中所有函数都跟有一对圆括号(),括号中可以有一些输入参数。如例题中显示,主函数(main function)的内容紧跟在它的声明之后,由花括号()括起来。cout 1 1 Hei low World!;这个语句在本程序中最重要。cout是J +中的标准输出流(通常为控制台,即屏幕),这句话把一串字符串(本例中为Hell。W o rld)插入输出流(控制台输出)中。cout在的声明在头文件iostream.h中,所以要想使用cout必须将该头文件包括在程序开始处。注意这个句子以分号(;)结尾。分号标示了一个语句的结束,O +的每一个语句都必须以分号结尾。(6+程序员最常犯的错误之一就是忘记在语句末尾写上分号).return 0;返回语句(return)引起主函数main()执行结束,并将该语句后面所跟代码(在本例中为0)返回。这是在程序执行没有出现任何错误的情况下最常见的程序结束方式。在后面的例子中你会看到所有J+程序都以类似的语句结束。你可能注意到并不是程序中的所有的行都会被执行。程序中可以有注释行(以/开头),有编译器预处理器的指示行(以#开头),然后有函数的声明(本例中main函数),最后是程序语句(例如调用c o u t ),最后这些语句行全部被括在主函数的花括号()内。本例中程序被写在不同的行中以方便阅读。其实这并不是必须的。例 如,以下程序int main()(cout Hello Worldreturn 0;)也可以被写成:int main()cout Hello World return 0;以上两段程序是完全相同的。在J +中,语句的分隔是以分号(;)为分隔符的。分行写代码只是为了更方便人阅读。以下程序包含更多的语句:/my second program in C+-+#include int main()(cout Hello World!cout Im a O+program;return 0;Hello World!Im a O+program在这个例子中,我们在两个不同的语句中调用了 cout 函数两次。再一次说明分行写程序代码只是为了我们阅读方便,因为这个m ain函数也可以被写为以下形式而没有任何问题:int main()cout Hello World!cout Im to O-+program return 0;为方便起见,我们也可以把代码分为更多的行来写:int main()(cout Hello World!;cout Im a O+program;return 0;)它的运行结果将和上面的例子完全一样。这个规则对预处理器指示行(以#号开始的行)并 不 适 用,因为它们并不是真正的语句。它们由预处理器读取并忽略,并不会生成任何代码。因此他们每一个必须单独成行,末尾不需要分号(;)注 释(Comments)注释(comments)是源代码的一部分,但它们会被编译器忽略。它们不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。O+支持两中插入注释的方法:/line comment/*block comment*/第一种方法为行注释,它告诉编译器忽略从开始至本行结束的任何内容。第二种为块 注 释(段 注 释),告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。在以下我们的第二个程序中,我们插入了更多的注释。/*my second program in O +with more comments*/#include int main()cout Hello World!/says Hello World!cout Im a O+program;/says Im a CH-+programreturn 0;Hello World!Im a C+program如果你在源程序中插入了注释而没有用符号或/*和*/符号,编译器会把它们当成J+的语句,那么在编译时就会出现一个或多个错误信息。1.2 变量和数据类型(Variables and Data types)你可能