logo资料库

C++教程完整.docx

第1页 / 共177页
第2页 / 共177页
第3页 / 共177页
第4页 / 共177页
第5页 / 共177页
第6页 / 共177页
第7页 / 共177页
第8页 / 共177页
资料共177页,剩余部分请下载后查看
C++ 基础教程 Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据 Juan Soulie 的英文版 C++教程翻译并改编。 本版为最新校对版,尚 未定稿。如有不明或错误之处,请参考英文原版,并敬请在本站留言指正。版权归作 者所有,欢迎链接,请勿转载。 本教程对 C++语言进行了深入浅出的介绍,从基础知识到 ANSI-C++标准的最新 功能,内容涵盖了从数组,类等基本概念到多态、模板等高级概念。教程本着实用的 原则,每一小节都结合了可以工作的程序实例,以便读者从第一课开始就可以上手实 习。 本翻译版本对许多 C++概念中的关键词保留了中英文对照,以便读者增强理解, 并方便日后阅读英文原版教材 目录 1. 简介 怎样使用本教程 2. C++基础 Basics of C++ 1. C++程序结构 Structure of a program 2. 变量和数据类型 Variables and Data types 3. 常量 Constants 4. 操作符/运算符 Operators 5. 控制台交互 Communication through console 1 / 177
3. 控制结构和函数 Control structures and Functions 1. 控制结构 Control Structures 2. 函数 I Functions I 3. 函数 II Functions II 4. 高级数据类型 Advanced Data 1. 数组 Arrays 2. 字符序列 Character Sequences 3. 指针 Pointers 4. 动态内存分配 Dynamic memory 5. 数据结构 Data Structures 6. 自定义数据类型 User defined data types 5. 面向对象编程 Object-oriented Programming 1. 类,构造函数和析构函数,类的指针 Classes. Constructors and Destructors. Pointers to classes. 2 / 177
2. 操作符重载,this,静态成员 Overloading Operators. this. Static members 3. 类之间的关系 Relationships between classes: friend. Inheritance 4. 虚拟成员,抽象,多态 Virtual Members. Abstraction. Polymorphism 6. C++高级 Advanced concepts 1. 模板 Templates 2. 名空间 Namespaces 3. 出错处理 Exception handling 4. 类型转换高级 Advacned Class Type-casting 5. 预处理指令 Preprocessor Directives 7. C++ 标准函数库 C++ Standard Library 1. 文件的输入输出 Input/Output with files C++基础教程简介 怎样使用本教程 读者范围 3 / 177
本教程面向所有希望学习 C++语言的读者。如果读者有其他编程语言背景或计算 机相关基本知识可以帮助更好的理解教程内容,但这并非必须条件。 对于 C 语言熟悉的读者可将前三章(1.1 到 3.4)当作复习,因为这部分内容主要 介绍 C++中的 C 部分。不过某些 C++的语法与 C 还是有些差别,所以建议还是快速的 读一下这部分。 第四章讲述面向对象编程。 第五章主要介绍 ANSI-C++标准中的新增的功能。 本教程结构 教程共分 6 章,每章分若干小节。你可以直接从主目录进入任意小节,并循每页 底部的链接向后浏览。 很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一章学习之 前最好先阅读这些例题,理解每行代码。 学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增 加新的功能。不要不敢修改这些例题程序,这正是学习的方法。 兼容性备注 ANSI-C++标准近几年来被接受为国际标准。尽管 C++语言从二十世纪 80 年代即 存在,ANSI-C++在 1997 年才被发表,2003 年又被修订过。因此很多编译器不支持 ANSI-C++中的部分新功能,特别是那些在此标准发表前即被发布的编译器。 在本教程中,那些 ANSI-C++中新增的而老一代 C++编译器大多不支持概念将备 用如下标志标出: ANSI C++新增的概念 同样对于 C 和 C++在实现上有明显不同的概念,将备用如下标志标出: C 与 C++不同的地方 编译器 本教程中所有例题程序均为 console 程序(控制台程序)。此类程序以文本形式与用 户交换信息,显示结果。 4 / 177
所有 C++编译器均支持 console 程序的编译。要了解更多关于如何编译的说明, 请查询你的编译器用户使用手册。 C++编译器和开发环境推荐 很多读者询问编译器和开发环境的问题。除了常用的商用收费的 MS Visual Studio, VC++,Borland C++等工具外,还有很多免费的工具也是很好用的。这里推荐两种免 费的 C++开发软件: 1、Eclipse 的 CDT 开发工具,官方网站在 http://www.eclipse.org/cdt/ 2、开源工具 Dev-C++和 wxDev-C++ 第一章 C++ 基础知识 (Basics of C++) 1. C++程序结构 Structure of a program 2. 变量和数据类型 Variables and Data types 3. 常量 Constants 4. 操作符/运算符 Operators 5. 控制台交互 Communication through console 1.1 C++程序结构 (Structure of a program) 下面我们从一个最简单的程序入手看一个 C++程序的组成结构。 // my first program in C++ #include using namespace std; int main() { 5 / 177
cout << “Hello World!”; return 0; } Hello World! 上面左侧显示了我们的第一个程序的源代码,代码文件名称为 hellowworld.cpp。 右边显示了程序被编译执行后的输出结果。编辑和编译一个程序的方法取决于你用的 是什么编译器,根据它是否有图形化的界面及版本的不同,编译方法也有可能不同, 具体请参照你所使用的编译器的使用说明。 以上程序是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出” Hello World!”这句话。 虽然它可能是 C++可写出的最简单的程序之一,但其中已经 包含了每一个 C++程序的基本组成结构。 下面我们就逐个分析其组成结构的每一部分: // my first program in C++ 这是注释行。所有以两个斜线符号(//)开始的程序行都被认为是注释行,这些注释 行是程序员写在程序源代码内,用来对程序作简单解释或描述的, 对程序本身的运行 不会产生影响。在本例中, 这行注释对本程序是什么做了一个简要的描述。 # include < iostream.h > 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器 作出指示。在本例中这个句子# include < iostream.h > 告诉编译器的预处理器将输入 输出流的标准头文件(iostream.h)包括在本程序中。这个头文件包括了 C++中定义的基 本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用 到它的功能。 using namespace std; C++标准函数库的所有元素都被声明在一个名空间中,这就是 std 名空间。因此 为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。 这条语句在使用标准函数库的 C++程序中频繁出现,本教程中大部分代码例子中也将 用到它。 (iostream.h 与 iostream 的不同。 #include是在旧的标准 C++中使用。在新标准中,用#include。 iostream 的意思是输入输出流。#include是标准的 C++头文件,任何符合标准 的 C++开发环境都有这个头文件。还要注意的是:在 VC 编程时要添加: using namespace std; 6 / 177
其原因是:后缀为.h 的头文件 C++标准已经明确提出不支持了,早些的实现将标准库 功能定义在全局空间里,声明在带.h 后缀的头文件里,C++标准为了和 C 区别开,也为了 正确使用命名空间,规定头文件不使用后缀.h。因此,当使用时,相当于在 C 中调用库函数,使用的是全局命名空间,也就是早期的 C++实现;当使用的 时候,该头文件没有定义全局命名空间,必须使用 namespace std;这样才能正确使用 cout。) int main() 这一行为主函数(main function)的起始声明。main function 是所有 C++程序的运 行的起始点。 不管它是在代码的开头,结尾还是中间,此函数中的代码总是在程序开 始运行时第一个被执行。并且,由于同样的原因,所有 C++程序都必须有一个 main function。 main 后面跟了一对圆括号(),表示它是一个函数。C++中所有函数都跟有一对 圆括号 (),括号中可以有一些输入参数。如例题中显示,主函数(main function)的 内容紧跟在它的声明之后,由花括号 ({})括起来。 cout << “Hellow World!”; 这个语句在本程序中最重要。 cout 是 C++中的标准输出流(通常为控制台,即屏 幕),这句话把一串字符串(本例中为”Hello World”)插入输出流(控制台输出)中。 cout 在的声明在头文件 iostream.h 中,所以要想使用 cout 必须将该头文件包括在程 序开始处。 注意这个句子以分号(;)结尾 。分号标示了一个语句的结束,C++的每一个语句都 必须以分号结尾。 (C++ 程序员最常犯的错误之一就是忘记在语句末尾写上分号) 。 return 0; 返回语句(return) 引起主函数 main()执行结束,并将该语句后面所跟代码(在本例 中为 0) 返回。这是在程序执行没有出现任何错误的情况下最常见的程序结束方式。在 后面的例子中你会看到所有 C++程序都以类似的语句结束。 你可能注意到并不是程序中的所有的行都会被执行。程序中可以有注释行(以// 开头),有编译器预处理器的指示行(以#开头),然后有函数的声明(本例中 main 函数),最后是程序语句(例如调用 cout <<),最后这些语句行全部被括在主函数 的花括号({})内。 7 / 177
本例中程序被写在不同的行中以方便阅读。其实这并不是必须的。例如,以下程 序 int main () { cout << " Hello World "; return 0; } 也可以被写成: int main () { cout << " Hello World "; return 0; } 以上两段程序是完全相同的。 在 C++中,语句的分隔是以分号(;)为分隔符的。分行写代码只是为了更方便人阅 读。 以下程序包含更多的语句: // my second program in C++ #include int main () { cout << "Hello World! "; cout << "I'm a C++ program"; return 0; } Hello World! I'm a C++ program 在这个例子中,我们在两个不同的语句中调用了 cout << 函数两次。再一次说明 分行写程序代码只是为了我们阅读方便,因为这个 main 函数也可以被写为以下形式而 没有任何问题: int main () { cout << " Hello World! "; cout << " I'm to C++ program "; return 0; } 8 / 177
分享到:
收藏