C语言面向程序设计03版.ppt
《C语言面向程序设计03版.ppt》由会员分享,可在线阅读,更多相关《C语言面向程序设计03版.ppt(286页珍藏版)》请在三一办公上搜索。
1、C+面向对象程序设计,目 录,第1章 C+基础第2章 类和对象(一)第3章 类和对象(二)第4章 友元第5章 运算符重载第6章 模板第7章 继承和派生第8章 虚函数和多态性第9章 C+流第10章 异常处理和名字空间第11章 C+标准模板库基础第12章 面向对象软件设计,第1章 C+基础,C+概述,计算机语言种类,计算机语言的种类非常多,总的来说可以分成机器语言、汇编语言、高级语言三大类。,计算机所能识别的语言只有机器语言,即由0和1构成的代码。但通常人们编程时,不采用机器语言,因为它非常难以记忆和识别。,目前通用的编程语言主要有两种形式:汇编语言和高级语言。,高级语言所编制的程序不能直接被计算
2、机识别,必须经过转换才能被执行,按转换方式可将它们分为解释方式和编译方式两类。,程序设计方法,程序设计是指设计、编写和调试程序的方法与过程。,1.结构化程序设计,结构化程序设计方法的核心包括自顶向下、逐步求精的开发方法、模块化的组织方式和结构化的语句结构等几方面。,结构化程序设计的特点如下。,程序设计:程序是由一个个的函数组成的,函数之间通过调用而相互作用。程序设计的主要技巧在于追踪哪些函数和调用哪些函数,哪些数据发生了变化。程序内容:由函数和函数调用构成。,结构化设计的弱点表现在抽象级别较低、封装性较差、可重用性较低等方面。,2.面向对象程序设计,面向对象程序设计方法的核心包括抽象、封装、对
3、象、类、消息和继承等几方面。,面向对象程序设计的特点如下。,程序设计:程序是由一个个的对象组成的,对象之间通过消息而相互作用。程序设计的主要技巧在设计哪些类以及类之间的关系。程序内容:由类对象和消息传递构成。,面向对象程序设计的优点表现在实现对现实世界客体的自然描述、可控制程序的复杂性、可增强程序的模块性、可提高程序的重用性和可改善程序的可维护性等方面。,C+语言及其特点,1.C+语言的起源,C+语言是一种高级语言,它是对C语言的扩展,是C语言的超集。贝尔实验室的Bjarne Stroustrup在C语言的基础上,创建了C+语言。,C+语言的ISO标准已在1997年11月被一致通过,1998年
4、8月被正式批准。,2.C+语言的特点,(1)C+支持数据封装(2)C+类中包含私有、公有和保护成员(3)C+中通过发送消息来处理对象(4)C+中允许友元破坏封装性(5)C+允许函数名和运算符重载(6)C+支持继承性(7)C+支持动态绑定,C+程序的基本结构,C+程序的基本结构如下。,(1)C+程序由函数组成(2)C+函数由函数首部与函数体两部分组成(3)C+程序的书写格式(4)C+的输入输出(5)C+注释(6)编译预处理命令,C+程序的开发步骤,C+是一种编译性的语言,设计好一个C+源程序后,需要经过编译、连接,生成可执行的程序文件,然后执行并调试程序。C+程序的开发步骤如下:,(1)分析问题
5、(2)编辑程序(3)编译程序(4)连接程序(5)运行调试程序,C+程序开发步骤如图所示。,C+语言初识,数据类型,C+的基本数据类型有5种:整型(int)、浮点型(float)、字符型(char)、双精度浮点型(double)和无值型(void)。,C+提供的5种基本数据类型,其数据的长度和范围会随处理器的类型和编译器类型的不同而异。一般来说,字符类型为1个字节长;整数类型与CPU字长相等,一般为2个字节或4个字节长;浮点数的长度一般为整型数的2倍;双精度类型字长为浮点型的2倍。,C+的修饰符有short、long和unsigned。,下表列出了大多数32位系统中内置数据类型的范围。,常量,常
6、量是在程序中不能改变的量。C+支持4种类型的常量:浮点型、整型、字符型和枚举型。,变量,顾名思义,变量就是值可变的量。一个变量有三个要素:,变量由一个变量名惟一标识,也就是说,每个变量有一个变量名。变量可以保存某个数据值,而数据值有相应的数据类型,所以每个变量又具有一个特定的数据类型。数据类型标志着这个变量将来的用法以及它将保存哪种类型的数据值。变量存储在内存中,有对应的地址,也就是说,每个变量有一个地址,可以进行取地址等操作,而其他表达式如x+y不能进行取地址操作。,(1)变量的命名(2)变量的定义和声明(3)变量的初始化,数据的输入和输出,输入输出是程序的基本功能。C+的标准输入/输出流库
7、用于数据的输入输出,用于输入输出的流库包含在头文件iostream.h中。,1.输出,C+定义了运算符“”的iostream类,而“”就是用于处理内部类型的输出。,(1)显示常数,使用cout可以显示字符串和数字,并可显示多个值。,(2)八进制和十六进制数的输出,在某些情况下,程序需要以八进制或十六进制数的形式输出。C+提供了简单的实现方法:只要在输出流中输出操纵符dec(十进制)、oct(八进制)或hex(十六进制)即可。,(3)控制输出宽度,C+提供的setw操纵符可以指定每个数值占用的宽度,即这个字符占用的最小字符长度。,(4)控制输出精度,C+提供的setprecision操纵符可以设
8、置显示数值的精度。,2.输入,C+提供了输入流cin,可以利用输入流cin读取键盘输入的字符和数值,并把它赋给指定的变量。从键盘上输入的数据通过cin接收,再由提取运算符“”送到程序指定的变量中。因此,用户输入数据时要避免输入的数据超出指定变量的值域。,控制语句,顺序控制语句,所谓顺序结构,就是按照语句的顺序一条一条地执行。顺序控制语句是一类简单的语句,包括表达式语句、复合语句、空语句和输入输出语句等。,选择控制语句,除简单的顺序控制语句外,C+还定义了一些可以控制程序执行流程的语句,这些语句提供对控制流的选择和循环功能。C+中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序执行的规则就要
9、改变。,C+中的选择控制语句有if语句、ifelse语句、ifelse if语句和switch语句。,循环控制语句,循环控制语句提供重复处理的能力,当某一特定条件为真时,循环语句就重复执行,并且每循环一次,就会测试一下循环条件,如果为假,则循环结束,否则继续循环。,C+支持三种格式的循环控制语句:while、do和for语句。三者可以完成类似的功能,不同的是它们控制循环的方式。,跳转语句,除了顺序执行和选择、循环控制外,有时需要中断一段程序的执行,跳转到其他地方继续执行,这时需用到跳转语句,包括break、continue和goto语句。,构造数据类型,数组类型,数组是具有相同数据类型的元素序
10、列。在内存中,它占据一组连续的内存位置。数组的每一项都是一个变量,称为元素。每个元素的存取是通过数组名加偏移来实现的。实际上,数组是一组相关的内存位置,它们都具有相同的名字和类型。为了引用数组中的特定位置或元素,需指定数组名和数组中特定元素的位置编号。,数组是程序设计语言中常用的数据结构之一。当若干数据具有相同的数据类型并且互相有一定关系时,把它们组织成数组非常有效。,和其他变量一样,在使用数组之前需要对数组进行定义。数组分为一维数组、二维数组和三维及以上的数组,通常把二维数组称为矩阵,三维及以上的数组称为多维数组。,枚举类型,枚举类型定义了一些整型符号常量的集合,其格式如下:,enum 类型
11、名 标识符1,标识符2,标识符n;,其中,“标识符1”至“标识符n”表示一些整型符号常量,它们默认由系统赋予整数值:“标识符1”的值为0,“标识符2”的值为1,“标识符n”的值为n-1,序列中每个标识符的值比前一个标识符大1。,程序员也可以自己定义标识符的值,定义方式是直接在定义语句的标识符后赋值。,结构体类型,在日常生活中经常会遇到这样的情况,由一些相关的数据共同表示一个信息。例如,表示一个学生的信息,可以包括学生的学号、姓名、性别、出生日期、班号等相关的数据项,这些数据项的组合表示一个学生的个人情况,它们之间是有内在联系的,任何一个单独的信息都不能完整地表示学生的信息。在C+中用结构体来表
12、示这些相关的信息。构成结构体的成员的数据类型可以不同,它们形成了一个整体,成为一个新的数据类型,称为结构体类型。结构体类型由各个成员构成,有时也将这些成员称为数据域,简称为域。,结构体类型和结构体变量的声明格式如下:,struct 结构体名/结构体类型声明 成员类型 成员1;成员类型 成员2;.成员类型 成员n;结构体变量名/结构体变量定义,其中,“结构体名”和“结构体变量名”都可以省略。省略前者表示声明了一个无名结构体类型和定义了具有该类型的变量,省略后者表示仅仅声明了一个结构体类型。,共用体类型,共用体的定义形式和用法类似于结构体,但结构体中的每个成员在内存中占有独立的存储位置,而共用体的
13、各个成员共享一块内存,所以,在任意时刻只能有一种数据类型的变量是活跃的。,共用体类型和共用体变量的声明格式如下:,union 共用体名/共用体类型声明 成员类型 成员1;成员类型 成员2;.成员类型 成员n;共用体变量名;/共用体变量定义,其中,“共用体名”和“共用体变量名”都可以省略。省略前者表示声明了一个无名共用体类型和定义了具有该类型的共用体变量,省略后者表示仅仅声明了一个共用体类型。,用户自定义类型,在C+中可以利用typedef定义自己的变量类型,其格式如下:,typedef 类型声明;,其中,“类型声明”类似于变量声明,只是变量名用类型名代替了,实际上,这等于定义了一个同义词,这种
14、方式与创建一个新的类型是不同的。,使用自定义类型有几点好处:一是可以更好地表达程序员的意思,如用width来表示将要定义的标识符是属于宽度一类的数据,用string表示程序员想要定义的是一个字符串,这比直接用系统预定义的类型清晰得多;二是简单方便,一些数据类型可以用一个简单的类型标识符来表示,不用每次都麻烦地写复杂的定义。,指针,指针的定义,定义指针时必须指明指针所指对象的数据类型,且在变量名前加上星号“*”表示这是一个指针。当定义多个同一类型的指针时,用逗号隔开各变量标识符,且每个变量前都要加上星号。,一个指针所占用的内存空间大小与一个内存地址所占空间等同,因而,一个浮点型指针和一个字符型指
15、针所占内存大小相同。指针的类型仅用于告知编译系统如何将指针所指的二进制序列翻译成实际的数据。,指针的初始化,指针初始化有下列几种方式。,(1)指针对象可以被一个具有相同类型的对象初始化。,(2)由另一个同一类型的指针初始化,同一类型的指针之间可以直接赋值。,(3)通过直接分配内存地址得到初值。,指针的运算符,定义指针变量的目的是,通过指针变量间接地访问变量。为此C+提供了两个指针运算符。,*:取指针值运算符。根据指针所指内存单元地址间接地访问对应存储单元,若指针变量p指向变量a,则*p运算的结果为变量a的值,即*p表示变量a的内容。&:取地址运算符。返回变量对应的存储单元地址,若a为int变量
16、,p为int型指针变量,则p=&a表示将a的存储单元地址赋给p,或者指针变量p指向变量a。,指针和数组的关系,在C+中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。,实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。,虽然数组名和指针在引用数组元素和取得它们的地址方面可以互换,但两者有一个重要的不同点:数组名是在定义时就已分配好了内存空间的,因此,数组名是一个地址常量,在程序中不能将数组名作为变量为其赋值,而指针是一个变量,可以多次赋值,注意:
17、,new与delete,尽管指针与数组具有相似性,但两者之间是有区别的:数组在定义时就根据指定的大小分配好了内存空间,而指针只是一个变量。,利用new运算符给指针分配一片内存空间,new运算符与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。,需要注意以下几点:,(1)运算符delete必须用于先前new分配的有效指针。,(2)用new也可指定分配的内存大小。,(3)new可以为数组分配内存,但当释放时,必须告诉delete数组有多少个元素。,函数,函数的定义和调用,在使用函数时,要先对函数进行定义,确定它要实现的功能。函数的使用就是调用函数的过程。在函数定义和调用中,把传
18、递给函数的值称为实际参数,把函数内部用来接收传递给函数的值的变量称为形式参数。,1.函数定义,C+中每一个函数的定义都是由4个部分组成的,即函数类型、函数名、函数参数表和函数体。,2.函数的声明,函数声明消除了函数定义的位置影响。不管函数是在何处定义的,只要在调用前进行函数的声明,就可保证函数调用的合法性。虽然函数不一定在程序的开始就声明,但为了提高程序的可读性和保证简洁的程序结构,最好将主函数main放在程序的开头,而将函数声明放在主函数main之前。,3.函数的调用,调用函数时,在函数名后跟参数(调用函数时的参数称为实际参数或实参),参数用逗号隔开。调用时,将实参中的实参值逐个代入形参,这
19、一过程称为向函数传递参数。,全局变量和局部变量,1.变量作用域,变量作用域是指变量的有效范围,一个变量只有在其有效范围内才能存取它的值。变量作用域有块级作用域、函数级作用域、文件级作用域和程序级作用域几个级别。,2.局部变量,作用域在函数级和块级的变量称为局部变量,也就是说,局部变量在一个函数或块内部定义。因此,局部变量只能在定义它的函数体或块内部使用,而不能在其他函数或块内使用这个变量。,有关局部变量的说明如下:,(1)main函数本身也是一个函数,因而在其内部声明的变量仍为局部变量,只能在main函数内部使用,而不能在其他函数中使用。,(2)在不同的函数中可声明具有相同变量名的局部变量,系
20、统会自动进行识别。,(3)形参也是局部变量,其作用域在定义它的函数内。所以形参和该函数体内的变量是不能重名的。,3.全局变量,作用域在程序级或文件级的变量称为全局变量,也就是说,全局变量是在函数外部定义和访问的。全局变量的作用域是从定义该变量的语句位置开始,直至本文件结束。因而全局变量声明后可以被很多函数使用。,有关全局变量的说明如下:,(1)全局变量的作用域是从声明该变量的位置开始直到程序结束处。,(2)全局变量的作用域为函数间传递数据提供了一种新的方法。,(3)在一个函数内部,如果一个局部变量和一个全局变量重名,则在局部变量的作用域内,全局变量不起作用。,4.变量的存储类别,变量的存储类别
21、有两种:auto(动态)和static(静态)。其使用说明如下:,(1)全局变量默认的存储类别为static,一旦定义后就分配存储空间,直到程序运行结束才释放其存储空间。,(2)局部变量默认的存储类别为auto,在遇到其定义后就分配存储空间,一旦退出其有效范围后就释放其存储空间。,(3)可以用static将局部变量的存储类别指定为static。这样局部static变量在经过不同函数调用之后,也可以保留它们原来的值。,函数的参数传递,C+中函数的参数传递分为按值传递、地址传递和引用传递几种。由于地址也是一种值,所以,按值传递和地址传递都是单向的值传递方式。,1.值传递,所谓按值传递,是指当一个函
22、数被调用时,C+根据实参和形参的对应关系将实际参数值一一传递给形参,供函数执行时使用。,2.引用传递,(1)什么是引用,引用是一个已知变量的别名,对引用的运算就是对被它关联的变量的运算,也就是说,引用和它所关联的变量享受同等的访问待遇。,(2)建立引用的方法,为建立引用,先写上被关联变量的数据类型,后跟引用运算符“&”,再是引用的名字。,(3)引用的特点,引用具有如下特点:,引用名字可以是任何合法变量名。引用必须初始化,而且初始化之后还可以成为另外同类型变量的引用。引用的类型和关联变量的类型应该是严格一致的。引用仅在声明时带有“&”,以后就像普通变量一样使用,不能再带“&”。引用的目的在于可以
23、用较清晰的方法编写改变其参数值的函数,以及接收结构体变量和对象作为参数的函数。,(4)引用作为函数参数,引用传递方式是将形参定义成对应实参的引用,即形参作为对应实参的别名,语法上只需在函数声明或定义中形参的数据类型后面加上符号“&”即可,其他语法与按值传递相同。,(5)引用返回值,所谓引用返回值是指一个函数声明为返回一个引用类型。引用作为返回值时,必须遵守以下规则:,不能返回局部变量的引用 不能返回函数内部new分配的内存的引用,(6)常引用,使用const修饰符可以声明引用,被声明的引用为常引用,不能通过常引用更新对象的值。,3.函数的默认参数值,在C+中,允许在函数的声明或定义时给一个或多
24、个参数指定默认值。这样在调用时,可以不给出参数,而按指定的默认值进行工作。,在设置函数的默认参数值时要注意以下两点:,(1)当函数既有声明又有定义后,不能再在函数定义中指定默认参数。(2)当一个函数中有多个默认参数时,则形参分布中默认参数应从右到左逐渐定义。在函数调用时,系统按从左到右的顺序将实参与形参结合,当实参的数目不足时,系统将按同样的顺序用声明中或定义中的默认值来补齐所缺少的参数。,内联函数,内联(inline)是内联扩展的简称。与一般函数不同,C+编译器在遇到调用内联函数的地方会用函数体中的代码来替换函数的调用,好处是节省函数调用带来的参数传递、运行栈的入栈与出栈等开销,从而提高运行
25、速度,但付出的代价是增加了代码长度。内联函数的定义是在一般函数定义前加上inline关键字。,函数重载,所谓函数重载是指同一个函数名可以对应多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个运算数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数类型不同。这就是函数重载的概念。,函数重载要求编译器能够惟一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 面向 程序设计 03

链接地址:https://www.31ppt.com/p-6504380.html