C++基础教程学习.doc

上传人:sk****8 文档编号:3550440 上传时间:2019-06-04 格式:DOC 页数:55 大小:471KB
下载 相关 举报
C++基础教程学习.doc_第1页
第1页 / 共55页
C++基础教程学习.doc_第2页
第2页 / 共55页
C++基础教程学习.doc_第3页
第3页 / 共55页
C++基础教程学习.doc_第4页
第4页 / 共55页
C++基础教程学习.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、1C+ 基础教程Beta 版原作:Juan Souli 翻译:Jing Xu (aqua)英文原版本教程根据Juan Soulie的英文版C+教程翻译并改编。 本版为最新校对版,尚未定稿。如有不明或错误之处, 请参考英文原版,并敬 请在本站留言指正。版权归作者所有,欢迎链接, 请勿转载。本教程对C+语言进行了深入浅出的介绍,从基础知识到ANSI-C+标准的最新功能,内容涵盖了从数组,类等基本概念到多态、模板等高级概念。教程本着实用的原则,每一小节都结合了可以工作的程序实例,以便读者从第一 课开始就可以上手 实习。本翻译版本对许多C+概念中的关键词保留了中英文对照,以便读者增强理解,并方便日后阅

2、读英文原版教材目录1. 简介 怎样使用本教程 2. C+基础 Basics of C+ 1. C+程序结构 Structure of a program 2. 变量和数据类型Variables and Data types 3. 常量 Constants4. 操作符/运算符 Operators 5. 控制台交互 Communication through console 3. 控制结构和函数 Control structures and Functions 1. 控制结构 Control Structures 2. 函数I Functions I 3. 函数II Functions II 4.

3、 高级数据类型 Advanced Data 1. 数组 Arrays 2. 字符序列 Character Sequences3. 指针 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. 操作符重载,this,静态成员 Ov

4、erloading 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. 预处理指令 Prepro

5、cessor Directives 7. C+ 标准函数库 C+ Standard Library 1. 文件的输入输出 Input/Output with files C+基础教程简介怎样使用本教程读者范围本教程面向所有希望学习C+语言的读者。如果读者有其他编程语言背景或计算机相关基本知识可以帮助更好的理解教程内容,但 这 并非必须条件。对于C语言熟悉的读者可将前三章(1.1 到 3.4)当作复习,因为这部分内容主要介 绍C+中的C部分。不过某些 C+的语法与C还是有些差别,所以建议还是快速的读一下这部分。第四章讲述面向对象编程。第五章主要介绍ANSI-C+ 标准中的新增的功能。本教程结构教

6、程共分6章,每章分若干小节。你可以直接从主目录进入任意小节 ,并循每页底部的链接向后浏览。2很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一章学习之前最好先阅读这些例题,理解每行代 码。学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增加新的功能。不要不敢修改 这些例题程序,这正是学习的方法。兼容性备注ANSI-C+标准近几年来被接受 为 国际标准。尽管C+语言从二十世 纪80年代即存在,ANSI-C+在1997年才被发表, 2003年又被修订过。因此很多编译器不支持 ANSI-C+中的部分新功能,特别是那些在此标准发表前即被发布的编译器。在本教程中,那些AN

7、SI-C+中新增的而老一代C+编译器大多不支持概念将 备用如下标志标出:ANSI C+新增的概念同样对于C和C+在实现上有明显不同的概念,将备用如下标志标出:C 与 C+不同的地方编译器本教程中所有例题程序均为console程序(控制台程序) 。此 类程序以文本形式与用户交换信息, 显示结果。所有C+编译器均支持console程序的编译。要了解更多关于如何 编译 的说明, 请查询你的编译器用户使用手册。C+编译器和开发环境推荐很多读者询问编译器和开发环境的问题。除了常用的商用收 费的MS Visual Studio, VC+,Borland C+等工具外,还有很多免费的工具也是很好用的。 这里

8、推荐两种免 费的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)下面我们从一个最

9、简单的程序入手看一个C+程序的组成结构。/ my first program in C+#include using namespace std;int main() cout 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子# include 告诉编译器的预处理器将输入输出流的标准头文件(iostream.h)包括在本程序中。 这个头文件包括了C+ 中定义的基本标准输入-输出程序库的声明。此 处它被包括 进来是因为在本程序的后面部分中将用到它的功能。using namespace std;C+标准函数库的所有元素都被声明在一个名空间中,这就是

10、std名空间。因此为了能够访问它的功能,我们用这条语句来表达我们将使用标准名空间中定义的元素。 这条语 句在使用标准函数库的C+程序中频繁出现,本教程中大部分代码例子中也将用到它。int main()这一行为主函数(main function)的起始声明。main function是所有C+程序的运行的起始点。 不管它是在代码的开头,结尾还是中间 此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有C+程序都必须有一个main function。main 后面跟了一对圆括号(),表示它是一个函数。C+ 中所有函数都跟有一对圆括号 (),括号中可以有一些输入参数。如例题中显

11、示,主函数(main function) 的内容紧跟在它的声明之后,由花括号 ()括起来。 cout int main ()cout int main ()cout using namespace std;int main ()/ declaring variables:int a, b;int result;/ process:a = 5;b = 2;a = a + 1;result = a - b;/ print out the result:cout using namespace std;int main ()int a=5; / 初始值为 5int b(2); / 初始值为 2int

12、 result; / 不确定初始值a = a + 3;result = a - b;cout ,并且使用using namespace语句来使用标准名空间(std),如下面例子所示:/ C+字符串例题#include #include using namespace std;int main ()string mystring = “This is a string“;cout #include using namespace std;int main ()string mystring;mystring = “This is the initial string content“;cout

13、using namespace std;int main ()int a, b; / a:?, b:?a = 10; / a:10, b:?b = 4; / a:10, b:4a = b; / a:4, b:4b = 7; / a:4, b:7cout =, using namespace std;int main ()int a, b=3;a = b;a+=2; / 相当于 a=a+2cout , =, 大于Greater than= 大于等于Greater or equal than4) 将返回true.(3 != 2) 将返回true.(6 = 6) 将返回true.(5 = c) 将返

14、回true 因为它实际是(2*3 = 6)(b+4 a*c) 将返回false因为它实际是(3+4 2*6)(b=2) = a) 将返回true.注意:运算符= (单个等号)不同于运算符= (双等号)。第一个是赋值运算符(将等号右边的表达式值赋给左边的 变量);第二个(=)是一个判断等于的关系运算符,用来判断运算符两边的表达式是否相等。因此在上面例子中最后一个表达式(b=2) = a),我们首先将数值2赋给变量b,然后把它和变量a进行比较。因为变 量a中存储的也是数值2,所以整个运算的结果为true。 在ANSI-C+标准出现之前的许多编译器中,就像C语言中,关系运算并不返回值为真true或假

15、false的bool值,而是返回一个整型数值最为结果,它的数值可以为0,代表“false“或一个非0数值( 通常为1)来代表“true“。 逻辑运算符Logic operators ( !, int main ()int a,b,c;a=2;b=7;c = (ab) ? a : b;cout b)运算值为假(false) ,所以整个表达式 (ab)?a:b要取分号后面的值,也就是b的值7。因此最后输出 c 的值为 7。逗号运算符 ( , )逗号运算符 (,) 用来分开多个表达式,并只取最右 边的表达式的值返回。例如有以下代码:a = (b=3, b+2); 这行代码首先将3赋值给变量b,然后将

16、 b+2 赋值给变量 a。所以最后变量a 的值为5,而 变量b的值为3。位运算符Bitwise Operators ( float f = 3.14;i = (int) f; 以上代码将浮点型数字3.14转换成一个整数值(3)。 这里类型转换操作符为(int) 。在 C+中实现这一操作的另一种方法是使用构造函数constructor 的形式:在要 转换的表达式前加变量类型并将表达式括在括号中:i = int ( f );以上两种类型转换的方法在C+中都是合法的。另外ANSI-C+针对 面向对象编程(object oriented programming)增加了新的 类型转换操作符 ( 参考Se

17、ction 5.4, Advanced class type-casting).sizeof()这个运算符接受一个输入参数, 该 参数可以是一个变量类型或一个变量自己,返回 该变量类型(variable type) 或对象(object)所占的字节数: a = sizeof (char); 这将会返回1给a,因为char是一个常为1个字节的变量类型。sizeof返回的值是一个常数,因此它总是在程序执行前就被固定了。 10其它运算符在本教程后面的章节里我们将看到更多的运算符,比如指向指针的运算或面向对象编程特有的运算,等等,我们会在它们各自的章节里进行详细讨论。运算符的优先度 Precedenc

18、e of operators当多个操作数组成复杂的表达式时,我们可能会疑惑哪个运算先被计算,哪个后被 计算。例如以下表达式: a = 5 + 7 % 2 我们可以怀疑它实际上表示:a = 5 + (7 % 2) 结果为6,还是 a = (5 + 7) % 2 结果为0?正确答案为第一个, 结果为6。每一个运算符有一个固定的优先级,不仅对数学运算符(我们可能在学习数学的时候已经很了解它们的优先顺序了),所有在 C+中出现的运算符都有优先级。从最从最高级到最低 级,运算的 优先级按下表排列:优先级Level 操作符Operator说明Description 结合方向Grouping1 : 范围 从

19、左到右2 () . - + - dynamic_cast static_cast reinterpret_cast const_cast typeid 后缀 从左到右3 + - ! sizeof new delete 一元(前缀) 从右到左* 根据我们想要实现的计算的不同,可以写成:a = 5 + (7 % 2); 或者 a = (5 + 7) % 2; 所以如果你想写一个复杂的表达式而不敢肯定各个运算的执行顺序,那么就加上括号。这样还可以使代码更易读懂。1.5 控制台交互(Communication through console)控制台(console)是 电脑的最基本交互接口,通常包括键

20、盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备,而 屏幕为标准输出设备。在C+的iostream 函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerr和clog也已经被实现 它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或到一个日志文件(log file)。因此cout ( 标准输出流) 通常被定向到屏幕,而 cin (标准输入流) 通常被定向到键盘。通过控制这两种数据流,你可以在程序中与用户交互,因 为你可以在屏幕上 显示输出并从键盘接收用户的输入。输出Output (cout)输出

21、流cout与重载(overloaded)运算符一起使用:cout “Output sentence“; / 打印Output sentence到屏幕上cout 120; / 打印数字 120 到屏幕上cout x; / 打印变量 x 的值到屏幕上 运算符又叫插入运算符(insertion operator) 因为它将后面所跟的数据插入到它前面的数据流中。在以上的例子中,字符串常量Output sentence,数字常量120和变量x先后被插入输出流cout中。注意第一句中字符串常量是被双引号引起来的。每当我 们使用字符串常量的时候,必须 用引号把字符串引起来,以便将它和 变量名明显的区分开来。

22、例如,下面两个 语句是不同的:cout “Hello“; / 打印字符串Hello到屏幕上cout Hello; / 把变量Hello存储的内容打印到屏幕上 插入运算符insertion operator ()可以在同一语句中被多次使用:cout “Hello, “ “I am “ “a C+ sentence“; 上面这一行语句将会打印 Hello, I am a C+ sentence 到屏幕上。插入运算符() 的重复使用在我们想要打印变量和内容的组合内容或多个变量时有所体现:cout “Hello, I am “ age “ years old and my zipcode is “ z

23、ipcode; 如果我们假设变量age的值为24,变量zipcode的值为90064,以上句子的输出将为: Hello, I am 24 years old and my zipcode is 90064 必须注意,除非我 们明确指定, cout并不会自动在其输出内容的末尾加换行符,因此下面的 语句:cout “This is a sentence.“;cout “This is another sentence.“; 将会有如下内容输出到屏幕:This is a sentence.This is another sentence.虽然我们分别调用了两次cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求。在C+中换行符可以写作n:cout “First sentence.n “;cout “Second sentence.nThird sentence.“; 将会产生如下输出: First sentence.Second sentence.Third sentence. 另外,你也可以用操作符endl来换行,例如:cout “First sentence.“ endl;cout “Second sentence.“ endl;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。