程序员实验室-C基础教程.docx
《程序员实验室-C基础教程.docx》由会员分享,可在线阅读,更多相关《程序员实验室-C基础教程.docx(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+基础教程Beta版原作:Juan Souli6翻译:Jing Xu (aqua)英文原版本教程根据Juan Soulie的英文版C+教程翻译并改编。本版为最新校对版,尚未定稿。如有不明或错误之处,请参考英文原版,并敬请在本站留言指正。版权归作者所有,欢迎链接,请勿转载。本教程对C+语言进行了深入浅出的介绍,从基础知识到ANSI-C+标准的最新功能,内容涵盖了从数组,类等基本概念到多态、模板等高级概念。教程本着实用的原则,每一小节都结合了可以工作的程序实例,以便读者从第一课开始就可以上手实习。本翻译版本对许多C+概念中的关键词保留了中英文对照,以便读者增强理解,并方便日后阅读英文原版教材目录
2、1 .简介怎样使用本教程2 . C+基础Basics of C+1 . C+程序结构Structure of a program2 .变量和数据类型Variables and Data types3 .常量Constants4 .操作符/运算符Operators5 .控制台交互Communication through console6 .控制结构和函数Control structures and Functions1 .控制结构Control Structures2 .函数IFunctions I3 .函数IIFunctions II4 .高级数据类型Advanced Data1 .数组Ar
3、rays2 .字符序列Character Sequences3 .指针Pointers4 .动态内存分配Dynamic memory5 .数据结构Data Structures6 .自定义数据类型User defined data types7 .面向对象编程Object-oriented Programming1 .类,构造函数和析构函数,类的指针Classes. Constructors and Destructors. Pointers to classes.2 .操作符重载,this,静态成员Overloading Operators, this. Static members3 .类
4、之间的关系Relationships between classes: friend. Inheritance4 .虚拟成员,抽象,多态Virtual Members. Abstraction. Polymorphism6. C+高级Advanced concepts1 .模板Templates2 .名空间Namespaces3 .出错处理Exception handling4 .类型转换高级Advacned Class Type-casting5 .预处理指令Preprocessor Directives7. C+标准函数库C+ Standard Library1.文件的输入输出Input/
5、Output with filesC+基础教程简介怎样使用本教程读者范围本教程面向所有希望学习C+语言的读者。如果读者有其他编程语言背景或计算机相关基本知识可以帮助更好的理解教程内容,但这并非必须条件。对于C语言熟悉的读者可将前三章(1.1到3.4)当作复习,因为这部分内容主要介绍C+中的C部分。不过某些C+的语法与C还是有些差别,所以建议还是快速的读一下这部分。第四章讲述面向对象编程。第五章主要介绍ANSI-C+标准中的新增的功能。本教程结构教程共分6章,每章分若干小节。你可以直接从主目录进入任意小节,并循每页底部的链接向后浏览。很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一
6、章学习之前最好先阅读这些例题,理解每行代码。学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增加新的功能。不要不敢修改这些例题程序,这正是学习的方法。兼容性备注ANSI-C+标准近几年来被接受为国际标准。尽管C+语言从二十世纪80年代即存在,ANSI-C+在1997年才被发表,2003年又被修订过。因此很多编译器不支持ANSI-C+中的部分新功能,特别是那些在此标准发表前即被发布的编译器。在本教程中,那些ANSI-C+中新增的而老一代C+编译器大多不支持概念将备用如下标志标出:ANSI C+新增的概念同样对于C和C+在实现上有明显不同的概念,将备用如下标志标出:C与C+不同
7、的地方编译器本教程中所有例题程序均为console程序(控制台程序).此类程序以文本形式与用户交换信息,显示结果。所有C+编译器均支持console程序的编译。要了解更多关于如何编译的说明,请查询你的编译器用户使用手册。C+编译器和开发环境推荐很多读者询问编译器和开发环境的问题。除了常用的商用收费的MS Visual Studio, VC+, Borland C+等工具外,还有很多免费的工具也是很好用的。这里推荐两种免费的C+开发软件:1、Eclipse 的 CDT 开发工具,官方网站在 http:www. eclipse, org/cdt/2、开源工具 Dev-C+和 wxDev-C+第一章
8、C+基础知识(Basics of C+)1 . C+程序结构Structure of a program2 .变量和数据类型Variables and Data types3 .常量Constants4 .操作符/运算符Operators5 .控制台交互Communication through console1.1 C+程序结构(Structure of a program)下面我们从一个最简单的程序入手看一个C+程序的组成结构。/ my first program in C+#include using namespace std;int main()cout Hello World! w
9、 ;return 0; Hello World!上面左侧显示了我们的第一个程序的源代码,代码文件名称为hellowworld. cpPo右边显示了程序被编译执行后的输出结果。编辑和编译一个程序的方法取决于你用的是什么编译器,根据它是否有图形化的界面及版本的不同,编译方法也有可能不同,具体请参照你所使用的编译器的使用说明。以上程序是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出 Hell。World!”这句话。虽然它可能是C+可写出的最简单的程序之一,但其中已经包含了每一个C+程序的基本组成结构。下面我们就逐个分析其组成结构的每一部分:/my first program in C+这是
10、注释行。所有以两个斜线符号()开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序作简单解释或描述的,对程序本身的运行不会产生影响。在本例中,这行注释对本程序是什么做了一个简要的描述。# include 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子# include 告诉编译器的预处理器将输入输出流的标准头文件(iostream. h)包括在本程序中。这个头文件包括了 C+中定义的基本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用到它的功能。using namespace std;C+标准
11、函数库的所有元素都被声明在一个名空间中,这就是std名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。这条语句在使用标准函数库的C+程序中频繁出现,本教程中大部分代码例子中也将用到它。int main()这,行为主函数(main function)的起始声明。main function是所有C+程序的运行的起始点。不管它是在代码的开头,结尾还是中间-此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有C+程序都必须有一个main function., main后面跟了一对圆括号(),表示它是一个函数。C+中所有函数都跟有一对圆括号0,
12、括号中可以有一些输入参数。如例题中显示,主函数(main function)的内容紧跟在它的声明之后,由花括号()括起来。cout “Hellow World!”;这个语句在本程序中最重要。cout是C+中的标准输出流(通常为控制台,即屏幕),这句话把一串字符串(本例中为“ Hello World”)插入输出流(控制台输出)中。cout在的声明在头文件iostream. h中,所以要想使用cout必须将该头文件包括在程序开始处。注意这个句子以分号(;)结尾。分号标示了个语句的结束,C+的每一个语句都必须以分号结尾。(C+程序员最常犯的错误之一就是忘记在语句末尾写上分号)。return 0:返回
13、语句(return)引起主函数main。执行结束,并将该语句后面所跟代码(在本例中为0)返回。这是在程序执行没有出现任何错误的情况下最常见的程序结束方式。在后面的例子中你会看到所有C+程序都以类似的语句结束。你可能注意到并不是程序中的所有的行都会被执行。程序中可以有注释行(以开头),有编译器预处理器的指示行(以#开头),然后有函数的声明(本例中main函数),最后是程序语句(例如调用cout ),最后这些语句行全部被括在主函数的花括号()内。本例中程序被写在不同的行中以方便阅读。其实这并不是必须的。例如,以下程序int main ()cout Hello Worldreturn 0;)也可以被
14、写成:int main () cout Hello World return 0;以上两段程序是完全相同的。在C+中,语句的分隔是以分号(;)为分隔符的。分行写代码只是为了更方便人阅读。以下程序包含更多的语句:/ my second program in C+#include int main ()cout Hello World!cout Im a C+ program*;return 0; Heilo World! Im a C+ program在这个例子中,我们在两个不同的语句中调用了 cout 函数两次。再一次说明分行写程序代码只是为了我们阅读方便,因为这个main函数也可以被写为以下
15、形式而没有任何问题: int main () cout ” Hello World! cout Im to C+ program return 0;为方便起见,我们也可以把代码分为更多的行来写:int main ()(cout Hello World!;cout Tm a C+ program*;return 0;)它的运行结果将和上面的例子完全一样。这个规则对预处理器指示行(以#号开始的行)并不适用,因为它们并不是真正的语句。它们由预处理器读取并忽略,并不会生成任何代码。因此他们每个必须单独成行,末尾不需要分号(;)注释(Comments)注释(comments)是源代码的一部分,但它们会被
16、编译器忽略。它们不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。C+支持两中插入注释的方法:/ line comment/* block comment */第一种方法为行注释,它告诉编译器忽略从开始至本行结束的任何内容。第二种为块注释(段注释),告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。在以下我们的第二个程序中,我们插入了更多的注释。/* my second program in C+with more comments */include int main ()cout Hello World!/ says Hello Wo
17、rld!cout Im a C+ program*;/ says Im a C+ programreturn 0; Hello World! Im a C+ program如果你在源程序中插入了注释而没有用符号或/*和*/符号,编译器会把它们当成C+的语句,那么在编译时就会出现一个或多个错误信息。1. 2变量和数据类型(Variables and Data types )你可能觉得这个Bellow World程序用处不大。我们写了好几行代码,编译,然后执行生成的程序只是为了在屏幕上看到一句话。的确,我们直接在屏幕上打出这句话会更快。但是编程并不仅限于在屏幕上打出文字这么简单的工作。为了能够进一
18、步写出可以执行更有用的任务的程序,我们需要引入变量(variable)这个的概念。让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字。你已经存储了两个数值在你的记忆里。现在我要求你在我说的第一个数值上加1,你应该保留6(即5+1)和2在你的记忆里。现在如果我们将两数相减可以得到结果4。所有这些你在脑子里做的事情与计算机用两个变量可以做的事情非常相似。同样的处理过程用C+来表示可以写成下面一段代码:a =5;b =2;a = a +1;result = a - b;很明显这是一个很简单的例子,因为我们只用了两个小的整数数值。但是想一想你的电脑可以同时存储成千上万这样的数
19、值,并进行复杂的数学运算。因此,我们可以将变量(variable)定义为内存的一部分,用以存储一个确定的值。每一个变量(variable)需要一个标识,以便将它与其他变量相区别,例如,在前面的代码中,变量标识是a, b,和result。我们可以给变量起任何名字,只要它们是有效的标识符。标识(Identifiers)有效标识由字母(letter),数字(digits)和下划线(一)组成。标识的长度没有限制,但是有些编译器只取前32个字符(剩下的字符会被忽略)。空格(spaces),标点(punctuation marks)和符号(symbols)都不可以出现在标识中。只有字母(letters),
20、数字(digits)和下划线(_)是合法的。并且变量标识必须以字母开头。标识也可能以下划线(_)开头,但这种标识通常是保留给为外部连接用的。标识不可以以数字开头。必须注意的另一条规则是当你给变量起名字时不可以和C+语言的关犍字或你所使用的编译器的特殊关键字同名,因为这样与这些关键字产生混淆。例如,以下列出标准保留关键字,他们不允许被用作变量标识名称:asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, el
21、se, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typena
22、me, union, unsigned, using, virtual, void, volatile, wchart, while 另外,不要使用一些操作符的替代表示作为变量标识,因为在某些环境中它们可能被用作保留词:and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq 你的编译器还可能包含一些特殊保留词,例如许多生成16位码的编译器(比如一些DOS编译器)把far, huge和near也作为关键字。非常重要:C+语言是“大小写敏感”(“case sensitive)的,即同样的名字字母大小写不同代表不同
23、的变量标识。因此,例如变量RESULT,变量result和变量Result分别表示三个不同的变量标识.基本数据类型(Fundamental Data types)编程时我们将变量存储在计算机的内存中,但是计算机要知道我们要用这些变量存储什么样的值,因为一个简单的数值,一个字符,或一个巨大的数值在内存所占用的空间是不一样的。计算机的内存是以字节(byte)为单位组织的。一个字节(byte)是我们在C+中能够操作的最小的内存单位。一个字节(byte)可以存储相对较小数据:-个单个的字符或个小整数(通常为一个0到255之间的整数)。但是计算机可以同时操作处理由多个字节组成复杂数据类型,比如长整数(l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序员 实验室 基础教程
限制150内