C++程序设计(4737)刘振安.ppt

上传人:夺命阿水 文档编号:236179 上传时间:2023-03-10 格式:PPT 页数:360 大小:5.21MB
返回 下载 相关 举报
C++程序设计(4737)刘振安.ppt_第1页
第1页 / 共360页
C++程序设计(4737)刘振安.ppt_第2页
第2页 / 共360页
C++程序设计(4737)刘振安.ppt_第3页
第3页 / 共360页
C++程序设计(4737)刘振安.ppt_第4页
第4页 / 共360页
C++程序设计(4737)刘振安.ppt_第5页
第5页 / 共360页
点击查看更多>>
资源描述

《C++程序设计(4737)刘振安.ppt》由会员分享,可在线阅读,更多相关《C++程序设计(4737)刘振安.ppt(360页珍藏版)》请在课桌文档上搜索。

1、1,4737 C+程序设计,2,需要了解的C语言知识,C语言基本语法If else 语句 For语句While语句,数组定义函数定义指针结构体运算符,3,第一章认识C+的对象,本节要点:,C与C+的关系(领会)掌握函数原型和命名空间的使用方法(综合应用)对象和预处理基本概念(领会)掌握C+程序的基本结构(综合应用),1.1初识C+的函数和对象,4,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,int x;,该语句在C语言和C+中均可使用,x在C语言中称为变量,在C+中称为对象。C语言与C+的不同点:称呼不同,5,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,结构

2、体的定义,struct point float x;float y;,表示定义一种点数据类型,包含坐标x,y.定义完成后,point成为一种类型,使用方式类似int类型,如:定义p1变量为点类型,写作:struct point p1;或point p1;,定义x变量为整型:int x;,6,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,结构体的定义,struct student int num;char name10;float grade;;,若定义一种结构体记录学生信息包含学号,姓名,成绩,如何定义?,定义s1变量为学生类型,写作:struct student s1;,7,

3、第一章认识C+的对象,1.1初识C+的函数和对象,例1.1输入一个点的信息,求该点到原点的距离,预处理命令,使用命名空间,声明函数,声明常量,定义结构体,,主函数main,求距离函数result,8,例1.1,9,例1.1主函数,10,例1.1,11,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:1,混合型语言C语言程序包含main函数面向对象语言没有main函数C+是混合型语言,12,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:2,注释方式/*。*/。,13,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:3,输入输出流cin和cout是

4、C+语言中进行输入输出操作的函数。其定义在isstream头文件中。类似:C语言中printf函数scanf函数putchar函数getchar函数,使用时要包含“stdio.h”,14,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:3,输入输出流cin和cout函数的简单使用cout后加要输出的内容,可以是对象或字符串,行末加分号,可用多个来分隔多个输出对象,endl;表示输出后换行。coutendl;等价于 cout“n”;,15,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:3,输入输出流cin和cout函数的简单使用cin后加存放数据的对象,即变量,

5、行末加分号,可用多个来分隔多个输入对象。cinxy;等价于 cinx;ciny;,16,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:4,使用命名空间是C+语言中封装程序库名称的一种机制记忆:C+标准类库中的对象和函数都属于std命名空间使用这些对象和函数时要using namespace std,17,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:4,使用命名空间使用std命名空间时注意:使用C语言中的头文件时,要写成“xxx.h”形式使用C+中的头文件则不能加上“.h”,18,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:5,对象定义及

6、初始化int x;x=0;等价于 int x=0;C语言int x(0);C+语言等价于上两条语句。此种初始化语法在C+中称为构造函数语法,19,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:6,函数原型及其返回值函数要有类型,若要得到处理结果则要使用return语句。,20,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:6,函数原型及其返回值函数原型声明函数调用在函数定义之前时要对函数进行声明,21,22,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序常量定义:#define PI 3.1415(c语言)在

7、变量定义之前加上const关键字,表示定义的变量值不可改变。const int PI=3.1415;const int PI(3.1415);,23,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序常量定义:#define PI 3.1415#define命令的特点:原样替换掉程序中出现的预定义宏名符号如:#define BUFFER 100若程序出现:x=BUFFER/3;x=?尽量选择const定义常量,24,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序const关键字的特点:利用const

8、定义常量时必须给出常量的值,除非该常量是extern的。如:const int d;extern const;,作业:1,extern变量是什么样的变量?,25,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序C+预处理命令以#开始,分为宏定义,文件包含和条件编译,作业:2,写出C语言中预处理命令有哪些,举例说明每个命令含义及作用。3,写出C语言和C+语言中#include命令的不同处,26,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:8,程序运行结果,27,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:9,

9、程序书写规则注意缩进对齐,使程序清晰明了,28,1.2认识C+语言面向过程编程的特点,本节要点:,函数重载(领会)掌握C+的新数据类型(简单应用)动态分配内存(综合应用)熟练掌握引用的使用方法(综合应用)了解对指针使用const限定符的目的,方法(识记)了解泛型算法应用于普通数组的方法(识记)掌握数据的简单输入输出(简单应用),29,第一章认识C+的对象,1.2认识C+语言面向过程编程的特点,本节要点:,1.2.1函数重载(领会)C+允许一个函数定义多个版本。使得一个函数完成多种功能。即:同一个函数名定义多次。,30,1.2.1函数重载(领会)重载函数max的调用形式:,31,1.2.1函数重

10、载(领会)重载函数max的定义形式:,32,1.2.1函数重载(领会)重载函数max的声明形式:,可否不声明?,重载函数的要点:函数名相同,参数个数不同,参数类型不同,33,1.2.2 C+的新数据类型(简单应用),1,void类型void表示无类型,或空类型。不能声明变量,只能声明函数返回值。表示函数无返回值。,34,2,bool型(逻辑型,布尔型)占1个字节。表示逻辑运算中的”真”假”3,整型(int long short)int、short 至少16位long 至少32位short 不得比int 长int 不得比long 长,35,4,char型(字符型)占1个字节。5,实型(float

11、/double/long double),36,5,,37,6,常量表示整型:0前缀表示8进制数,0 x前缀表示16进制加L、l后缀表示长整型常量实型:F、f后缀表示浮点型常量(float)实数加L、l后缀表示long double型无前缀,无后缀的为double型,38,6,常量表示,0L123l0550 x50 xaf01,7,转义字符,101trn0 x41,39,1.2.3 动态分配内存(综合应用)new 动态分配内存一般格式:指针变量=new 类型size;new 运算符得到新分配空间的首地址,赋值给指针变量后,可根据指针变量的加减运算来使用这些空间。delete 释放内存 使用完毕

12、后要释放内存delete p;,40,1.2.4 引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型 表示a是变量x的别名。一旦定义别名后则a和x完全等价。,41,1.2.4 引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型 表示a是变量x的别名。一旦定义别名后则a和x完全等价。,42,1.2.4 引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型&别名=对象名;,43,使用引用时注意:1,不能定义引用的引用 int 2,不能直接定义数据组的引用,44,1.2.4 引用的使用方法(综合

13、应用),一般格式:typedef 类型 类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedef long int lint;则 long int i;等价于 lint i;,用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头,45,引用数组名作参数,一般格式:typedef 类型 类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedef long int lint;则 long int i;等价于 lint i;,46,Typedef使用说明,t

14、ypedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头,等价于,47,1.2.5 对指针使用const限定符(识记),1,左值和右值表达式:E1=E2E1是左值,是可被修改的int*p,x=1;*p=2;&p表示什么?,48,1.2.5 对指针使用const限定符(识记),2,指向常量的指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。int x=11;const int*P;const int*P=表示*P是不可改变的。*P不能在=左侧。P=&y;x=12;,49,1.2.5

15、 对指针使用const限定符(识记),3,常量指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。int x=11;int*const P;错!必须初始化int*const P=&x;表示P是不可改变的。P不能在=左侧。*p可改变。,50,1.2.5 对指针使用const限定符(识记),4,指向常量的常量指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。int x=11;const int*const P=&x;表示P是不可改变的。*p不可改变。,51,1.2.6 泛型算法应用于普通数组(识记)掌握数据的简单输入输出(简单应用)

16、泛型算法是C+标准模板库(Standard Template Library)提供的一组操作。利用这些操作可以简化数组操作。要使用这些操作必须包含头文件,52,1.2.6 泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:1,reverse(a,a+len)将数组a中的元素顺序反转。(逆向)2,copy(a,a+len,b)将a数组的内容原样复制给b数组reverse_copy(a,a+len,b)将a数组的内容反转后复制给b数组,53,1.2.6 泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:3,sort(a,a+len)将数组a中

17、的元素按升序排序4,sort(a,a+len,greater()将数组a中的元素按降序排序,54,1.2.6 泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:5,find(a,a+len,value)在数组a中查找值为value的元素,并返回位置指针,55,1.2.6 泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:6,输出数组中的内容Copy(a,a+len,Ostream_iterator(cout,”字符串”))Ostream_iterator表示输出流操作符:表示要输出的数组类型Cout表示流输出操作“字符串”:表示分隔字符串

18、,56,第一章认识C+的对象,1.2认识C+语言面向过程编程的特点,本节要点:,1.2.7 数据的简单输入输出(简单应用),57,第一章认识C+的对象,1.3程序的编辑、编译、运行,58,第一章认识C+的对象,课后题:P26 三、改错题 写作业本上,59,第二章从结构到类的演变,2.1结构的演化.结构发生质的演变1.函数与数据共存,C+允许结构中定义函数,成为成员函数在结构中同时定义成员变量与成员函数使用格式:结构对象.成员变量结构对象.成员函数,60,第二章从结构到类的演变,1.函数与数据共存结构的定义,struct point double x,y;void Setxy(double a,

19、double b)x=a;y=b;void Display()cout xtyendl;,61,第二章从结构到类的演变,1.函数与数据共存结构的定义,struct point double x,y;void Setxy(double a,double b)x=a;y=b;void Display()cout xtyendl;,数据成员,成员函数,62,第二章从结构到类的演变,1.函数与数据共存结构的定义,63,第二章从结构到类的演变,运行结果,64,第二章从结构到类的演变,主函数,65,完整程序,66,修改后的程序,67,第二章从结构到类的演变,2 封装若定义结构体时,使用了private关键

20、字,则产生封装性,68,使用了private关键字,则产生封装性,69,第二章从结构到类的演变,2 封装在定义结构时,若使用了private则产生封装性,表示成员为私有的,只能在结构体内部通过公有成员函数使用。若未添加private则表示默认为public。类定义时默认为private。,70,第二章从结构到类的演变,2.1.2 使用构造函数初始化结构的对象在定义结构时,与结构同名的函数称为构造函数。若定义的函数与某个已定义函数重名而参数类型或个数不同,则称为函数重载。,71,2.1.2 使用构造函数初始化结构的对象,问题:那个函数是构造函数?那个函数被重载了?,结构体的定义,72,2.1.2

21、 使用构造函数初始化结构的对象,注:构造函数在定义结构体对象时自动执行,并根据是否初始化来自动选择所调用的构造函数,73,2.1.2 使用构造函数初始化结构的对象,74,2.1.2 使用构造函数初始化结构的对象,75,第二章从结构到类的演变,2.2从结构演化成一个简单的类,将程序中struct替换为class即变为类的标准定义形式,76,第二章从结构到类的演变,2.2从结构演化成一个简单的类,产生类对象p1,p2,为对象的属性赋值,显示对象属性值,77,第二章从结构到类的演变,2.2从结构演化成一个简单的类,类图的表示,类名,类属性/成员变量,类操作/成员函数,78,第二章从结构到类的演变,2

22、.3面向过程和面向对象,简单了解对象的含义,79,第二章从结构到类的演变,2.3面向过程和面向对象,简单了解对象的含义,80,第二章从结构到类的演变,2.3面向过程和面向对象,简单了解对象的含义,81,第二章从结构到类的演变,面向过程 的求解步骤给出三角形三个顶点坐标,计算三边长,并输出步骤:输入x1,y1,x2,y2,x3,y3 六个数据 计算(x1,y1)和(x2,y2)距离 计算(x1,y1)和(x3,y3)距离 计算(x2,y2)和(x3,y3)距离 输出三个距离,82,第二章从结构到类的演变,面向对象 的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,设计类将点设计为一个类,并提

23、供相关的属性和操作,83,第二章从结构到类的演变,面向对象 的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,定义对象同时给出坐标point A(x1,y1)point B(x2,y2)point C(x3,y3),84,第二章从结构到类的演变,面向对象 的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,定义对象,然后获取坐标point A;point B;point C;A.Getx();A.Gety();B.Getx();B.Gety();C.Getx();C.Gety();,85,第二章从结构到类的演变,面向对象 的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,计算距离并输

24、出AB=A.GetLength(B);AC=A.GetLength(C);BC=B.GetLength(C);,86,第二章从结构到类的演变,2.4C+面向对象程序设计特点,2.4.1 对象三要素:对象名,属性,操作,87,第二章从结构到类的演变,2.4C+面向对象程序设计特点,2.4.1 对象三要素:对象名,属性,操作,88,第二章从结构到类的演变,2.5使用类和对象,2.5.1使用string对象,类名,类的属性用于存放字符串,类的操作/方法/成员函数,89,第二章从结构到类的演变,2.5使用类和对象,2.5.1使用string对象,该类是C+语言中的内部预定义类,要在程序中使用该类时必须

25、添加头文件#inculude,90,第二章从结构到类的演变,2.5使用类和对象,2.5.1使用string对象,类的初始化:string str1=“A”;string str1=A;string str1=AB;string str1=“AB”;可以以数组的形式使用str1对象中的字符串str10的值是?str11的值是?,91,2.5.1使用string对象,类的初始化:string str1(“hello,”);string str2=“world”;可以以数组的形式使用str1对象中的字符串str10的值是?str20的值是?,92,2.5.1使用string对象,93,2.5.1使用

26、string对象,运行结果,94,2.5.1使用string对象,string对象允许使用+运算,95,2.5.1使用string对象对象的方法(操作/成员函数):对象名.成员函数str1.size()String对象可使用+运算Str1=str2+str3若str2=“hello,”str3=“everyone”则str1的结果是?,96,2.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.size()若Str1=“everyone!”Str1.size()值为:9,97,2.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:s

27、tr1.substr()若Str1=“everyone”Str1.substr(5,3)值为:“one”,C+中字符串中字符位置计数从0开始,98,2.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.substr(),C+中字符串中字符位置计数从0开始,99,2.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.find(要查找的字符串,开始位置)结果为子串的位置,C+中字符串中字符位置计数从0开始,100,2.5.2使用string对象的成员函数getline函数的使用功能:利用cin函数输入一行字符串存入对象例如:g

28、etline(cin,str1,n),101,2.5.2使用string对象的成员函数getline函数的使用功能:利用cin函数输入一行字符串存入对象例如:getline(cin,str1,n),102,简单应用:日期格式转换,103,2.5.3使用complex对象complex类用于定义一个复数对象使用时添加头文件#include 定义格式:complex num1(1,2);,104,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。使用string对象添加?头文件?,添加头文件#include 并使用标准命名空间using namespace std;,105,2.5.4使用

29、对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。定义对象时可对对象进行初始化。int i;string str1;定义时初始化:int i=1;或 int i(1);string str1=“hello”;或 string str1(“hello”);,106,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。同类的不同对象由对象名和属性来区分。具有相同的成员函数。string str1=“hello”;string str2(“everyone”);Cout str1.size()endl;Cout str2.size()endl;

30、,107,2.5.4使用对象小结不同类对象具有不同的成员函数可实现不同操作。Complex num1(1,2);String str1(“hello”);Coutnum1.real()endl;Coutstr1.sizeendl;Coutstr1endl;coutnum1endl;,108,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。定义对象时可对对象进行初始化。同类的不同对象由对象属性来区分。不同类对象具有不同的成员函数可实现不同操作。类是具有相同特征和操作的对象的抽象。,109,2.6string对象数组与泛型算法,110,第三章函数和函数模版,3

31、.1函数的参数及其传递方式,C语言中参数传递方式只有一种:值传递值传递分为:变量值传递和变量地址值传递C+中分为:值传递和地址传递(引用传递),111,3.1函数的参数及其传递方式,1,2,1,2,112,3.1函数的参数及其传递方式,1,2,b,a,2000,2002,2000,2002,113,3.1函数的参数及其传递方式,要注意区分:参数传递中传地址和传地址值不同。设计函数时要注意:对象作参数,对象指针作参数,对象引用作参数,114,3.1函数的参数及其传递方式,3.1.1对象作函数参数作用同C语言中普通变量作参数,115,3.1函数的参数及其传递方式,3.1.2对象指针作函数参数作用同

32、C语言中变量指针作参数,116,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用的声明形式:数据类型 则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。,117,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用的声明形式:数据类型 b=10;则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。程序中引用对象的改变会使得被引用对象发生改变。,118,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用作函数参数:类型 函数名(类型&参数,)函数调用时,实参对象名传递给形参对象名,形参对象名成为实

33、参的别名,函数中对形参的改变就会导致实参值的改变。,119,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用作函数参数:类型 函数名(类型&参数,)函数调用时,实参对象名传递给形参对象名,形参对象名成为实参的别名,函数中对形参的改变就会导致实参值的改变。,120,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用作函数参数:类型 函数名(类型&参数,),121,3.1函数的参数及其传递方式,3.1.3引用作为函数参数引用作函数参数 说明:1,引用对象不是一个独立对象,不占用内存。2,对象的指针作参数时,指针变量中存放实参对象的地址。3,引用对象作参数时,函数调用时形参对象

34、和实参对象共用一个内存单元。,122,引用数组名作参数,123,引用数组名作参数,一般格式:typedef 类型 类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedef long int lint;则 long int i;等价于 lint i;,124,Typedef使用说明,typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头,等价于,125,3.1函数的参数及其传递方式,3.1.4默认参数函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认

35、值。,126,3.1函数的参数及其传递方式,3.1.4默认参数函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认值。注意:若函数第n个参数是默认参数,当调用函数需要指定该参数值时,则该参数前的所有参数都必须指定。,127,3.1函数的参数及其传递方式,3.1.5使用const保护数据const限定参数值不可修改。,128,3.2深入讨论函数的返回值,129,3.2深入讨论函数的返回值,3.2.1返回引用的函数,130,3.2深入讨论函数的返回值,3.2.2返回指针的函数,131,3.2深入讨论函数的返回值,3.2.2返回指针的函数,132,3.2深入讨论函数的返回值,

36、3.2.3返回对象的函数,133,3.2深入讨论函数的返回值,3.2.2返回指针的函数补充说明:new语句 delete语句 NULLNew格式:指针变量=new 类型nDelete格式:delete 指针变量NULL表示空,134,3.2深入讨论函数的返回值,135,3.2深入讨论函数的返回值,3.2.3返回对象的函数,136,3.2深入讨论函数的返回值,3.2.4返回值作为函数参数,137,3.3内联函数,138,定义函数时,加inline关键字表示该函数为内联函数。,3.3内联函数,139,定义函数时,加inline关键字表示该函数为内联函数。程序中的内联函数在程序编译时,将函数体替换至

37、程序中函数调用位置,造成程序变长,效率提高。注意:内联函数中不能出现循环、switch语句 内联函数一般短小,不宜过长 应在调用之前声明或定义,3.3内联函数,140,3.4函数重载和默认参数,同一个函数名实现多种功能,在C+中称为多态,可利用函数重载和默认参数两种方式实现,141,3.4函数重载和默认参数,同一个函数名实现多种功能,在C+中称为多态,可利用函数重载和默认参数两种方式实现,定义或声明函数时,给出参数初始化值,则函数调用时若省略参数,则参数取该初始化值。称为默认参数。,142,3.4函数重载和默认参数,同一个函数名实现多种功能,在C+中称为多态,可利用函数重载和默认参数两种方式实

38、现注意:函数重载和默认参数可同时使用。若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。,143,3.4函数重载和默认参数,同一个函数名实现多种功能,在C+中称为多态,可利用函数重载和默认参数两种方式实现注意:函数重载和默认参数可同时使用。若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。参数类型不同时,可以重载。,144,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,145,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,146

39、,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,147,3.5函数模板,函数模板定义格式:,定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。,148,3.5函数模板,此种形式调用中称为函数模板的参数一般可省略。Typename可替代class,149,3.5函数模板,若某函数参数类型不一致时,也可定义函数模板。,150,第四章类和对象,4.1类及其实例化,4.1.1类的定义,151,152,:称为域限定符,表示函数是类的成员函数。此时函数若要定义为内联,则加inline关键字

40、,类内定义的函数默认为内联函数。,153,注意:类定义时,数据成员的赋值必须写在某个函数的内部。一般使用类似set的函数进行赋值。S1.set(1001,张三,22,99.5)类student的set函数应该怎么定义?,154,4.1类及其实例化,4.1.2使用类的对象类的对象的使用类似变量的使用。,声明/定义对象,直接利用对象名使用,通过对对象的引用使用对象,通过指向对象的指针使用对象,155,4.1.2使用类的对象类的对象的使用类似变量的使用。在main函数中是否可按如下方式使用?,156,4.1.2使用类的对象数据成员使用规律:1,类的成员函数可以直接使用类的数据成员2,类外的函数不能使

41、用类的私有成员3,类外的函数可以访问类的公有成员函数4,对象间的区别在于其属性值不同,157,4.1.3数据封装对象间利用公有成员函数进行通信。公用成员函数是对象的接口。,158,4.2构造函数4.2.1默认构造函数若类的定义中未定义构造函数,则C+编译器会自动产生一个不带参数的默认构造函数,类似于:point(),此时不对对象进行初始化。若类中定义了构造函数,则不再产生默认构造函数。,159,4.2.2定义构造函数构造函数无返回值,这样可以减少编译器的工作,提高效率。构造函数与类同名。构造函数可以重载。构造函数系统自动调用。,160,4.2.2定义构造函数,初始化列表,初始化列表,161,4

42、.2.3 构造函数和运算符new,New和构造函数一同起作用,即new首先给对象分配内存,然后自动调用构造函数来初始化这块内存。,注意:new建立的动态对象只能用delete删除,一边释放空间。,162,4.2.4构造函数的默认参数,这是错误的,因为Point()比有默认参数的函数少。,163,4.2.5复制构造函数:(const,Point(Point&p)比有默认参数的函数少,为什么它是对的。,164,4.3析构函数 析构函数的调用由编译器自动调用 析构函数名在类名前加 析构函数无返回值 析构函数无参数,可以显示说明为void 析构函数不可以重载 析构函数在对象生命期结束的时候由系统自动调

43、用。,165,4.3.1定义析构函数,类的对象数组的每个元素调用一次构造函数,调用一次析构函数。全局对象数组的析构函数在程序结束之前被调用。,166,4.3.2析构函数和运算符delete delete后自动调用析构函数。与new相反。p81 例4.84.3.3默认析构函数 编译器为没有析构函数的类自动产生一个空体析构函数,与构造函数类似。总结:分配几次内存调用几次构造函数,反之调用析构函数,167,4.4调用复制构造函数的综合实例 p82【例4.9】,168,4.5成员函数重载及默认参数 p85【例4.10】,169,4.6 this指针 this指针是c+实现粉状的一种机制,它将对象和该对

44、象调用的成员函数连接在一起。this指针保证了每个对象可以拥有自己的数据成员。,170,4.7一个类的对象作为另一个类的成员 p87【例4.11】,171,4.8类和对象的性质4.8.1对象的性质同一类的对象之间可以相互赋值;可以使用对象数组;可以使用指向对象的指针;对象可以用作函数参数;对象作为函数参数时,可以使用对象、对象引用和对象指针;一个对象可以用作另一个类的成员。,172,4.8.1类的性质使用类的权限不完全的类声明只用当使用类产生对象时,才进行内存分配;类没有完全定义之前就引用该类不完全声明仅用于类和结构空类类作用域类中默认控制权限时private,173,4.9面向对象的标记图

45、UML(Unified Modeling Language)时1992年面向对象管理组(OMG)制定的面向对象分析和设计的国际标准。UML时一种可视化建模语言,主要用于面向对象分析和建模。,174,4.9.1类和对象的UML标记图(识记),Car,175,176,4.9.2对象的结构与连接(识记),177,4.10面向对象编程的文件规范4.10.1 编译指令(识记)4.10.2 在头文件中使用条件编译(领会),178,第五章特殊函数和成员,5.1对象成员的初始化,类的定义:,179,5.1对象成员的初始化,180,5.1对象成员的初始化,181,5.1对象成员的初始化,示例【5.1】doubl

46、e 变成了其他类,182,5.2静态成员成员定义时使用了static关键字1,静态成员变量的初始化只能在类外进行。2,类中的任何成员函数都可访问静态成员变量3,访问静态成员时,一般加上类名限定。4,静态成员变量是类的成员,不是对象的成员.5,对象未建立之前静态成员已经存在。6,静态成员没有this指针,除非使用引用方式否则不能存取类的成员。,183,5.2静态成员-静态对象,184,5.3友元函数可以实现两个类之间无限制的存取另一个类的成员。友元函数可以访问私有成员,公有成员和保护成员。友元函数可以是一个类或函数。友元需通过对象来使用类的成员。友元的三种形式:1,普通函数作一个类的友元2,a类

47、的成员函数作b类的友元3,a类作为b类的友元,185,5.3友元函数1,普通函数作一个类的友元 例5.4,186,5.3友元函数2,a类的成员函数作b类的友元,187,5.3友元函数2,a类的成员函数作b类的友元,188,5.3友元函数2,a类的成员函数作b类的友元,189,5.3友元函数3,a类作b类的友元,190,总结:友元函数可以实现两个类之间无限制的存取另一个类的成员。友元函数可以访问私有成员,公有成员和保护成员。友元函数可以是一个类或函数。友元需通过对象来使用类的成员。友元的三种形式:1,普通函数作一个类的友元2,a类的成员函数作b类的友元3,a类作为b类的友元,191,5.4con

48、st对象const可限定变量、指针、对象、函数、数据成员、成员函数。表示不可改变。1,const成员 2,const对象 3,const函数1,const成员 区别于const变量const变量定义时需要初始化。const成员在构造函数中初始化(初始化列表形式),192,5.4const对象1,const成员 区别于const变量,193,5.4const对象1,const成员 区别于const变量,194,5.4const对象2,const引用作参数,195,5.4const对象2,const对象和const函数const 对象只能调用const成员函数const 函数中不允许使用改变变量或

49、成员值的语句,196,复习上节对象初始化:构造函数两种定义形式。const限定的数据成员 引用数据成员静态成员:静态数据成员,静态成员函数友元:普通函数做友元 类的成员函数做友元 类做友元const成员:const数据成员(const引用)const成员函数 const对象,197,复习上节类的对象数组:对象数组中的每个元素都是一 个对象。对象数组元素的使用同普通对象使用。对象的指针:指向对象的指针使用对象的成员函数和数据成员。对象指针数组:数组中每个元素都是一个指向对象的指针。指向函数的指针:函数有地址,指针能存地址,指针可以指向函数。,198,5.5数组和类类可定义对象数组。int a5;

50、int a5=1,2,3,4,5;point p3;point p3=point(1,2),point(3,4),point(5,6)定义数组时未初始化调用point()形式构造函数定义数组并初始化调用point(a,b)形式构造函数使用数组中的元素时利用:pointi形式Pointi的使用同普通对象使用方式相同,199,5.5数组和类类可定义对象数组,可定义指向对象的指针数组名是数组在内存中的首地址指针可以存放地址可用指针指向数组通过指针可以使用对象成员p-show()通过指针可以使用对象数组元素的成员Pa;a0.show();p-show();,200,5.5数组和类定义对象的指针数组in

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号