面向对象程序设计 ch1.ppt
《面向对象程序设计 ch1.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计 ch1.ppt(157页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1章章C+语言的新面貌语言的新面貌C语言是结构化程序设计语言,它的程序设计语言是结构化程序设计语言,它的程序设计特点就是函数设计。同样,特点就是函数设计。同样,C+语言的类也语言的类也离不开函数。离不开函数。本章将通过一个实际的例子,介绍本章将通过一个实际的例子,介绍C+如何如何兼容面向过程设计、它的基本程序结构及其兼容面向过程设计、它的基本程序结构及其在函数设计上与在函数设计上与C语言的异同。然后给出使用语言的异同。然后给出使用函数重载的实例,以便为从结构引入类的知函数重载的实例,以便为从结构引入类的知识打下基础。最后介绍识打下基础。最后介绍C+语言的动态内存语言的动态内存分配、引用、指
2、针使用分配、引用、指针使用const、范型算法用于范型算法用于普通数组及数据的简单输出输入格式。普通数组及数据的简单输出输入格式。主要内容主要内容1.1似曾相识燕归来似曾相识燕归来1.2使用函数重载使用函数重载1.3C+的基本数据类型的基本数据类型1.4旧貌换新颜旧貌换新颜1.5C+的几个新面貌的几个新面貌1.6各章节关系和教学建议各章节关系和教学建议1.7程序的编辑、编译和运行的基本概念程序的编辑、编译和运行的基本概念1.1似曾相识燕归来似曾相识燕归来本节给出一个使用结构和函数的本节给出一个使用结构和函数的典型的典型的C+程序,既复习程序,既复习C语言的语言的知识,又引入知识,又引入C+语言
3、的新特征,语言的新特征,并为学习设计类打下基础。并为学习设计类打下基础。【例例1.1】演示使用结构的示例程序。演示使用结构的示例程序。/*功能:将结构的两个域值相加,然后乘以功能:将结构的两个域值相加,然后乘以2*/#include/包含头文件包含头文件usingnamespacestd;/使用命名空间使用命名空间intresult(int,int);/result函数的原型声函数的原型声明明constintk=2;/定义常量定义常量structPoint/定义结构定义结构pointintx,y;/定义结构成员定义结构成员x和和y;intmain()/主程序主程序intz(0),b(50);/
4、初始化整数对象初始化整数对象Pointa;/定义结构对象定义结构对象acouta.xa.y;/接受输入数值接受输入数值z=(a.x+a.y)*k;/计算结果计算结果z=result(z,b);/计算结果计算结果cout“计算结果如下:计算结果如下:”endl;/输出信息并换输出信息并换行行cout(a.x+a.y/输出信息输出信息)*k)-b/输出信息输出信息=z/输出结果输出结果endl;/换行换行return0;/主函数主函数main的返回值的返回值/主函数结束主函数结束/*/*函函数:数:result*/*参参数:整型对象数:整型对象a和和b*/*返回值:整型对象返回值:整型对象*/*i
5、ntresult(inta,intb)a=a-b;returna;/返回返回a-b1.主函数造就混合型语言主函数造就混合型语言用用C+语言编写的程序称为语言编写的程序称为C+语言源程序,简称语言源程序,简称C+程序并以程序并以“.cpp”作为文件扩展名。像作为文件扩展名。像C语言一样,一语言一样,一个个C+程序必须有一个且只能有一个名为程序必须有一个且只能有一个名为main的主函的主函数。数。main并非是并非是C+语言定义的关键字,但语言定义的关键字,但C+编译编译系统假设程序中定义有系统假设程序中定义有main函数。如果没有定义,程函数。如果没有定义,程序将无法执行。因为序将无法执行。因为
6、C+保留了这个面向过程的主函数,保留了这个面向过程的主函数,所以称之为混合型语言。所以称之为混合型语言。2.灵活的注释方式灵活的注释方式程序中以程序中以“/”开始的内容是注释,有效范围至本行结开始的内容是注释,有效范围至本行结束,注释的内容在编译时不产生目标代码。所谓目标代束,注释的内容在编译时不产生目标代码。所谓目标代码,就是程序可以执行的代码。码,就是程序可以执行的代码。另外一种注释形式是沿用另外一种注释形式是沿用C语言的语法,即从语言的语法,即从“/*”开开始,直到始,直到“*/”结束,它更适合注释占多行的情况。结束,它更适合注释占多行的情况。目前使用目前使用“/”注释多行的现象愈来愈多
7、,例如程序中注释多行的现象愈来愈多,例如程序中对函数对函数result的注释。只要不遗忘左边的注释符号的注释。只要不遗忘左边的注释符号“/”,就不会出错,就不会出错。一个好的程序设计者应该在程序中正确使用注释来说明整一个好的程序设计者应该在程序中正确使用注释来说明整个程序的功能、注意事项及有关算法等。有人认为,注释个程序的功能、注意事项及有关算法等。有人认为,注释愈多,程序的可读性和可维护性愈好,其实不然,仅需在愈多,程序的可读性和可维护性愈好,其实不然,仅需在必要的地方进行注释即可。也就是说,应该加的是程序的必要的地方进行注释即可。也就是说,应该加的是程序的注释,不是对程序的说明。注释,不是
8、对程序的说明。3.使用输出和输入对象使用输出和输入对象C+将数据从一个对象流向另一个对象的流动抽象为将数据从一个对象流向另一个对象的流动抽象为“流流”。从流中获取数据的操作称为提取操作,向流中添加数。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。据的操作称为插入操作。cin用来处理标准输入,即键盘用来处理标准输入,即键盘输入。输入。cout用来处理标准输出,即屏幕输出。它们都能对用来处理标准输出,即屏幕输出。它们都能对数据自动按照正确的默认格式处理。语句数据自动按照正确的默认格式处理。语句cout输入两个整数输入两个整数(以空格区分以空格区分):;是输出信息是输出信息“输
9、入两个整数输入两个整数(以空格区分以空格区分):”,用来提示,用来提示用户输入用户输入2个整数。它就是个整数。它就是C+的的“语句语句”(statement),),语句以分号作为结束。语句以分号作为结束。就像自然语言中的句子一样,语句是就像自然语言中的句子一样,语句是C+程序的最程序的最小独立单元。因为小独立单元。因为cin和和cout都不是都不是C+语言本身定语言本身定义的一部分,而是由义的一部分,而是由C+的一套面向对象类体系的一套面向对象类体系(classeshierarchy)提供支持,并作为提供支持,并作为C+标准程序标准程序库库(standardlibrary)的一员。要使用这个类
10、体系,的一员。要使用这个类体系,需先在主函数之前使用需先在主函数之前使用#include语句将其包含,以便语句将其包含,以便让程序知道该类体系的定义。让程序知道该类体系的定义。C+标准输入输入库的标准输入输入库的头文件是头文件是iostream,所以程序中使用下述语句:所以程序中使用下述语句:#include/包含头文件包含头文件符号符号“”由连按两次由连按两次“”表示接受键盘输入,语句表示接受键盘输入,语句“cina.x;”将输入赋给对象将输入赋给对象a的域的域x。符号符号“”和和“”形象地表示了数据流动的方向。形象地表示了数据流动的方向。可以在一条语句中多次使用流的符号,也可以分为多可以在
11、一条语句中多次使用流的符号,也可以分为多个语句,例如可改写程序中的输出为如下形式:个语句,例如可改写程序中的输出为如下形式:cout(a.x+a.y;/以分号结束以分号结束cout)*k)-b;/以分号结束以分号结束cout=z;/以分号结束以分号结束coutendl;/与语句与语句“cout”n“;”功能相功能相同同“coutendl;”与与“couta.x;/使用两行使用两行cina.y;endl可以插在流的中间,下面语句将可以插在流的中间,下面语句将a.x和和a.y分为两行输分为两行输出的例子。出的例子。couta.xendla.yendl;4.使用命名空间使用命名空间C语言一直使用后缀
12、语言一直使用后缀“.h”标识头文件,在标识头文件,在【例【例1.1】中没中没有使用后缀,其原因是新的有使用后缀,其原因是新的C+标准引入了新的标准类库标准引入了新的标准类库的头文件载入方式,即省略的头文件载入方式,即省略“.h”。不过,这时必须同时不过,这时必须同时使用下述语句:使用下述语句:usingnamespacestd;/使用命名空间使用命名空间所谓命名空间所谓命名空间(namespace)是一种将程序库名称封装起来是一种将程序库名称封装起来的方法,它提高了程序的性能和可靠性。目前无需深入了的方法,它提高了程序的性能和可靠性。目前无需深入了解它的含义,只要记住解它的含义,只要记住C+标
13、准中的标准类库的变量与函标准中的标准类库的变量与函数都属于命名空间数都属于命名空间std,若要在程序中使用若要在程序中使用cin和和cout这两这两个个iostream类的对象,不仅要包含类的对象,不仅要包含iostream头文件,还头文件,还得让命名空间得让命名空间std内的名称曝光,这条语句就是让命名空内的名称曝光,这条语句就是让命名空间中的名称曝光。间中的名称曝光。C+新标准就是将标准类库的头文件与一般的头文件(需新标准就是将标准类库的头文件与一般的头文件(需要使用后缀要使用后缀“.h”)区分开来,当然也可以自己定义符合区分开来,当然也可以自己定义符合标准库的头文件,使用这种头文件时,也
14、需同时使用命名标准库的头文件,使用这种头文件时,也需同时使用命名空间语句。空间语句。由以上分析可见,一般的程序都要具有如下两条语句:由以上分析可见,一般的程序都要具有如下两条语句:#include/包含头文件包含头文件usingnamespacestd;/使用命名空间使用命名空间当使用其他头文件时,有的不需要使用后缀当使用其他头文件时,有的不需要使用后缀“.h”,例如例如,但有的仍然需要使用后缀形式,例但有的仍然需要使用后缀形式,例如如。5.对象的定义及初始化对象的定义及初始化定义对象包括为它命名并赋予它数据类型。每个对象定义对象包括为它命名并赋予它数据类型。每个对象都隶属某个特定的数据类型。
15、对象名称如果设计得好,都隶属某个特定的数据类型。对象名称如果设计得好,能让人直接联想到该对象的属性。能让人直接联想到该对象的属性。本程序使用两个整数对象本程序使用两个整数对象z和和b。int是是C+的关键字,的关键字,用来定义整数对象。可以在同一行使用如下两条语句:用来定义整数对象。可以在同一行使用如下两条语句:intz=0;intb=50;/一行有多条语句,为了一行有多条语句,为了/可读性一般不这样做可读性一般不这样做也可在一个语句中定义多个对象,其间以逗号隔也可在一个语句中定义多个对象,其间以逗号隔开,即:开,即:intz=0,b=50;一般来说,一般来说,即使初值只用来表示该对象尚未具有
16、即使初值只用来表示该对象尚未具有真正意义的值,也应将每个对象初始化。本程序真正意义的值,也应将每个对象初始化。本程序使用了一种不同的初始化语法,称为构造函数语使用了一种不同的初始化语法,称为构造函数语法。目前先不解释原因,只要记住它们的作用相法。目前先不解释原因,只要记住它们的作用相同即可:同即可:intz(0);/等同于等同于intz=0;intb(50);/等同于等同于intb=50;6.函数和函数原型函数和函数原型C+要求所有函数都需要有类型说明,主函数也不例外。要求所有函数都需要有类型说明,主函数也不例外。这里的这里的intmain()指出指出main函数是整数类型。函数返回函数是整数
17、类型。函数返回值值由由return后面的表达式决定。这个表达式的值必须与后面的表达式决定。这个表达式的值必须与声明函数的类型一致。这个程序确实不需要返回值,声明函数的类型一致。这个程序确实不需要返回值,所以使用语句所以使用语句return0;表示表示main函数结束,返回函数结束,返回“0”值。值。如果函数确实不需要返回值,还可以用如果函数确实不需要返回值,还可以用void标识,一标识,一旦使用旦使用void标识,函数体内就不再需要使用标识,函数体内就不再需要使用return语语句。如果再使用句。如果再使用“return0;”,则编译出错。但可使用则编译出错。但可使用“return;”语句。语
18、句。本书以后对无需返回值的函数将使用本书以后对无需返回值的函数将使用void的形式且不的形式且不使用使用return语句。语句。C+函数有库函数(标准函数)和自定义函数两类,本例函数有库函数(标准函数)和自定义函数两类,本例的函数的函数result就是自定义函数。就是自定义函数。C+程序使用变量的基本程序使用变量的基本规则是:规则是:必须先声明,后使用,对函数调用也是如此。必须先声明,后使用,对函数调用也是如此。如如果没有语句果没有语句“intresult(int,int);”,当编译主函数当编译主函数main,扫描到语句扫描到语句z=result(z,b);时,尚没有见到时,尚没有见到res
19、ult函数,这时就会报错。所以在主函函数,这时就会报错。所以在主函数之前使用语句数之前使用语句intresult(int,int);/函数函数result的原型声明的原型声明对对result函数进行原型声明。这个语句声明了函数进行原型声明。这个语句声明了result的函的函数原型,即只列出参数的数据类型。它向编译系统声明,数原型,即只列出参数的数据类型。它向编译系统声明,后面有一个后面有一个result函数,该函数有函数,该函数有2个整型类型的参数,个整型类型的参数,函数返回整型值。编译系统记录下调用这个函数所需要的函数返回整型值。编译系统记录下调用这个函数所需要的信息,然后根据函数原型对程序
20、中调用函数的合法性进行信息,然后根据函数原型对程序中调用函数的合法性进行全面的检查。因为是检查调用函数的类型是否和声明的一全面的检查。因为是检查调用函数的类型是否和声明的一致,所以声明时不需要给出参数的变量名称。如果使用下致,所以声明时不需要给出参数的变量名称。如果使用下述方式声明:述方式声明:intresult(inta,intb);因为编译系统不检查参数名,所以效果一样。为了全面严因为编译系统不检查参数名,所以效果一样。为了全面严格检查调用函数是否匹配,应该养成使用函数原型声明的格检查调用函数是否匹配,应该养成使用函数原型声明的好习惯。在好习惯。在C+中,每一个函数都有基本相同的形式:中,
21、每一个函数都有基本相同的形式:函数类型声明函数名(形式参数列表)函数类型声明函数名(形式参数列表)变量声明变量声明语句部分语句部分函数可按任何顺序出现,函数可按任何顺序出现,且可出现在一个源程序文件且可出现在一个源程序文件或多个源程序文件中。或多个源程序文件中。函数定义中不可缺少的部分是:函数定义中不可缺少的部分是:函数类型声明函数类型声明函数名函数名()其他部分根据需要来确定有无。其他部分根据需要来确定有无。分析函数的定义形式,可以把定义分为两部分,即函数分析函数的定义形式,可以把定义分为两部分,即函数声明部分和函数体。声明部分和函数体。函数类型声明用来定义函数返回值的数据类型,可使用函数类
22、型声明用来定义函数返回值的数据类型,可使用基本数据类型和自定义类型。基本数据类型和自定义类型。C+编译系统要求必须指定类型,无返回值函数的类型编译系统要求必须指定类型,无返回值函数的类型为为void。函数体是处理需要完成功能的部分,它从花括号函数体是处理需要完成功能的部分,它从花括号“”开始,开始,直到与此对应的花括号直到与此对应的花括号“”为止。变量说明通为止。变量说明通常接在常接在“”的后面的后面,接在变量说明后的是语句部分。,接在变量说明后的是语句部分。函数体的最后是函数体的最后是“”,表示该函数到此结束。表示该函数到此结束。另外,另外,C+中也常使用空的函数体函数。例如:中也常使用空的
23、函数体函数。例如:voidtmpc()这里这里tmpc是函数名。因为是函数名。因为“”内没有任何可供执行内没有任何可供执行的语句,所以该函数一旦被调用,就什么也不做而立即返的语句,所以该函数一旦被调用,就什么也不做而立即返回到调用它的函数里去,这是回到调用它的函数里去,这是C+程序的最小函数形式。程序的最小函数形式。这种函数有两种用途:第这种函数有两种用途:第1种是用在程序开发时,为给将种是用在程序开发时,为给将来要设置的函数事先安排一个位置,往往给函数起个暂时来要设置的函数事先安排一个位置,往往给函数起个暂时的名字,待以后再设计这个函数。当设计正确之后,再将的名字,待以后再设计这个函数。当设
24、计正确之后,再将它改为合适的名字。第它改为合适的名字。第2种是用在继承中,基类声明一个种是用在继承中,基类声明一个函数作为接口,由派生类根据需要去定义它的功能。函数作为接口,由派生类根据需要去定义它的功能。7.const修饰符和预处理程序修饰符和预处理程序C语言一般定义常量使用宏定义语言一般定义常量使用宏定义“#define”,在在C+中,中,建议使用建议使用const代替宏定义。代替宏定义。注意到注意到const就是冠在语句定义之前的,因此可以进行类就是冠在语句定义之前的,因此可以进行类型判别。型判别。用关键字用关键字const修饰的标识符是一类特殊的常量,称为修饰的标识符是一类特殊的常量,
25、称为符号常量符号常量(有名常量有名常量),或称之为,或称之为const变量变量(常量变量常量变量)。const修饰符的使用也很简单。事实上,对基本数据类修饰符的使用也很简单。事实上,对基本数据类型的变量,一旦加上型的变量,一旦加上const修饰符,编译器就将其视为修饰符,编译器就将其视为一个常量,并且每当在程序中遇到它时,都用在说明时一个常量,并且每当在程序中遇到它时,都用在说明时所给出的初始值取代它。所给出的初始值取代它。使用使用const可以使编译器对处理内容有更多的了解,从可以使编译器对处理内容有更多的了解,从而允许对其进行类型检查,并可改善程序的可读性。而允许对其进行类型检查,并可改善
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 ch1 面向 对象 程序设计
限制150内