




已阅读5页,还剩354页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,4737C+程序设计,教材:机械工业出版社/刘振安,.,2,需要了解的C语言知识,C语言基本语法Ifelse语句For语句While语句,数组定义函数定义指针结构体运算符,.,3,第一章认识C+的对象,本节要点:,C与C+的关系(领会)掌握函数原型和命名空间的使用方法(综合应用)对象和预处理基本概念(领会)掌握C+程序的基本结构(综合应用),1.1初识C+的函数和对象,.,4,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,intx;,该语句在C语言和C+中均可使用,x在C语言中称为变量,在C+中称为对象。C语言与C+的不同点:称呼不同,.,5,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,结构体的定义,structpointfloatx;floaty;,表示定义一种点数据类型,包含坐标x,y.定义完成后,point成为一种类型,使用方式类似int类型,如:定义p1变量为点类型,写作:structpointp1;或pointp1;,定义x变量为整型:intx;,.,6,第一章认识C+的对象,1.1初识C+的函数和对象,C语言回顾,结构体的定义,structstudentintnum;charname10;floatgrade;;,若定义一种结构体记录学生信息包含学号,姓名,成绩,如何定义?,定义s1变量为学生类型,写作:structstudents1;,.,7,第一章认识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是C+语言中进行输入输出操作的函数。其定义在isstream头文件中。类似:C语言中printf函数scanf函数putchar函数getchar函数,使用时要包含“stdio.h”,.,14,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:3,输入输出流cin和cout函数的简单使用cout后加要输出的内容,可以是对象或字符串,行末加分号,可用多个来分隔多个输出对象,endl;表示输出后换行。coutendl;等价于cout后加存放数据的对象,即变量,行末加分号,可用多个来分隔多个输入对象。cinxy;等价于cinx;ciny;,.,16,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:4,使用命名空间是C+语言中封装程序库名称的一种机制记忆:C+标准类库中的对象和函数都属于std命名空间使用这些对象和函数时要usingnamespacestd,.,17,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:4,使用命名空间使用std命名空间时注意:使用C语言中的头文件时,要写成“xxx.h”形式使用C+中的头文件则不能加上“.h”,.,18,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:5,对象定义及初始化intx;x=0;等价于intx=0;C语言intx(0);C+语言等价于上两条语句。此种初始化语法在C+中称为构造函数语法,.,19,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:6,函数原型及其返回值函数要有类型,若要得到处理结果则要使用return语句。,.,20,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:6,函数原型及其返回值函数原型声明函数调用在函数定义之前时要对函数进行声明,.,21,.,22,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序常量定义:#definePI3.1415(c语言)在变量定义之前加上const关键字,表示定义的变量值不可改变。constintPI=3.1415;constintPI(3.1415);,.,23,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序常量定义:#definePI3.1415#define命令的特点:原样替换掉程序中出现的预定义宏名符号如:#defineBUFFER100若程序出现:x=BUFFER/3;x=?尽量选择const定义常量,.,24,第一章认识C+的对象,1.1初识C+的函数和对象,对程序的说明:7,const修饰符和预处理程序const关键字的特点:利用const定义常量时必须给出常量的值,除非该常量是extern的。如:constintd;externconst;,作业: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,程序书写规则注意缩进对齐,使程序清晰明了,.,28,1.2认识C+语言面向过程编程的特点,本节要点:,函数重载(领会)掌握C+的新数据类型(简单应用)动态分配内存(综合应用)熟练掌握引用的使用方法(综合应用)了解对指针使用const限定符的目的,方法(识记)了解泛型算法应用于普通数组的方法(识记)掌握数据的简单输入输出(简单应用),.,29,第一章认识C+的对象,1.2认识C+语言面向过程编程的特点,本节要点:,1.2.1函数重载(领会)C+允许一个函数定义多个版本。使得一个函数完成多种功能。即:同一个函数名定义多次。,.,30,1.2.1函数重载(领会)重载函数max的调用形式:,.,31,1.2.1函数重载(领会)重载函数max的定义形式:,.,32,1.2.1函数重载(领会)重载函数max的声明形式:,可否不声明?,重载函数的要点:函数名相同,参数个数不同,参数类型不同,.,33,1.2.2C+的新数据类型(简单应用),1,void类型void表示无类型,或空类型。不能声明变量,只能声明函数返回值。表示函数无返回值。,.,34,2,bool型(逻辑型,布尔型)占1个字节。表示逻辑运算中的”真”假”3,整型(intlongshort)int、short至少16位long至少32位short不得比int长int不得比long长,.,35,4,char型(字符型)占1个字节。5,实型(float/double/longdouble),.,36,5,,.,37,6,常量表示整型:0前缀表示8进制数,0 x前缀表示16进制加L、l后缀表示长整型常量实型:F、f后缀表示浮点型常量(float)实数加L、l后缀表示longdouble型无前缀,无后缀的为double型,.,38,6,常量表示,0L123l0550 x50 xaf01,7,转义字符,101trn0x41,.,39,1.2.3动态分配内存(综合应用)new动态分配内存一般格式:指针变量=new类型size;new运算符得到新分配空间的首地址,赋值给指针变量后,可根据指针变量的加减运算来使用这些空间。delete释放内存使用完毕后要释放内存deletep;,.,40,1.2.4引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型表示a是变量x的别名。一旦定义别名后则a和x完全等价。,.,41,1.2.4引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型表示a是变量x的别名。一旦定义别名后则a和x完全等价。,.,42,1.2.4引用的使用方法(综合应用)C+中新的表示形式。引用即使用变量的别名。定义形式:数据类型则longinti;等价于linti;,用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头,.,45,引用数组名作参数,一般格式:typedef类型类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedeflongintlint;则longinti;等价于linti;,.,46,Typedef使用说明,typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头,等价于,.,47,1.2.5对指针使用const限定符(识记),1,左值和右值表达式:E1=E2E1是左值,是可被修改的int*p,x=1;*p=2;constint*P;constint*P=表示*P是不可改变的。*P不能在=左侧。P=int*constP;错!必须初始化int*constP=constint*constP=voidSetxy(doublea,doubleb)x=a;y=b;voidDisplay()coutxtyendl;,.,61,第二章从结构到类的演变,1.函数与数据共存结构的定义,structpointdoublex,y;voidSetxy(doublea,doubleb)x=a;y=b;voidDisplay()coutxtyendl;,数据成员,成员函数,.,62,第二章从结构到类的演变,1.函数与数据共存结构的定义,.,63,第二章从结构到类的演变,运行结果,.,64,第二章从结构到类的演变,主函数,.,65,完整程序,.,66,修改后的程序,.,67,第二章从结构到类的演变,2封装若定义结构体时,使用了private关键字,则产生封装性,.,68,使用了private关键字,则产生封装性,.,69,第二章从结构到类的演变,2封装在定义结构时,若使用了private则产生封装性,表示成员为私有的,只能在结构体内部通过公有成员函数使用。若未添加private则表示默认为public。类定义时默认为private。,.,70,第二章从结构到类的演变,2.1.2使用构造函数初始化结构的对象在定义结构时,与结构同名的函数称为构造函数。若定义的函数与某个已定义函数重名而参数类型或个数不同,则称为函数重载。,.,71,2.1.2使用构造函数初始化结构的对象,问题:那个函数是构造函数?那个函数被重载了?,结构体的定义,.,72,2.1.2使用构造函数初始化结构的对象,注:构造函数在定义结构体对象时自动执行,并根据是否初始化来自动选择所调用的构造函数,.,73,2.1.2使用构造函数初始化结构的对象,.,74,2.1.2使用构造函数初始化结构的对象,.,75,第二章从结构到类的演变,2.2从结构演化成一个简单的类,将程序中struct替换为class即变为类的标准定义形式,.,76,第二章从结构到类的演变,2.2从结构演化成一个简单的类,产生类对象p1,p2,为对象的属性赋值,显示对象属性值,.,77,第二章从结构到类的演变,2.2从结构演化成一个简单的类,类图的表示,类名,类属性/成员变量,类操作/成员函数,.,78,第二章从结构到类的演变,2.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,第二章从结构到类的演变,面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,设计类将点设计为一个类,并提供相关的属性和操作,.,83,第二章从结构到类的演变,面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,定义对象同时给出坐标pointA(x1,y1)pointB(x2,y2)pointC(x3,y3),.,84,第二章从结构到类的演变,面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,定义对象,然后获取坐标pointA;pointB;pointC;A.Getx();A.Gety();B.Getx();B.Gety();C.Getx();C.Gety();,.,85,第二章从结构到类的演变,面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出,计算距离并输出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+语言中的内部预定义类,要在程序中使用该类时必须添加头文件#inculude,.,90,第二章从结构到类的演变,2.5使用类和对象,2.5.1使用string对象,类的初始化:stringstr1=“A”;stringstr1=A;stringstr1=AB;stringstr1=“AB”;可以以数组的形式使用str1对象中的字符串str10的值是?str11的值是?,.,91,2.5.1使用string对象,类的初始化:stringstr1(“hello,”);stringstr2=“world”;可以以数组的形式使用str1对象中的字符串str10的值是?str20的值是?,.,92,2.5.1使用string对象,.,93,2.5.1使用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对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.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函数输入一行字符串存入对象例如:getline(cin,str1,n),.,101,2.5.2使用string对象的成员函数getline函数的使用功能:利用cin函数输入一行字符串存入对象例如:getline(cin,str1,n),.,102,简单应用:日期格式转换,.,103,2.5.3使用complex对象complex类用于定义一个复数对象使用时添加头文件#include定义格式:complexnum1(1,2);,.,104,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。使用string对象添加?头文件?,添加头文件#include并使用标准命名空间usingnamespacestd;,.,105,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。定义对象时可对对象进行初始化。inti;stringstr1;定义时初始化:inti=1;或inti(1);stringstr1=“hello”;或stringstr1(“hello”);,.,106,2.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。同类的不同对象由对象名和属性来区分。具有相同的成员函数。stringstr1=“hello”;stringstr2(“everyone”);Coutstr1.size()endl;Coutstr2.size()endl;,.,107,2.5.4使用对象小结不同类对象具有不同的成员函数可实现不同操作。Complexnum1(1,2);Stringstr1(“hello”);Coutnum1.real()endl;Coutstr1.sizeendl;Coutstr1endl;coutnum1show();,.,200,5.5数组和类定义对象的指针数组int*p;表示定义一个指针变量intp5;表示定义一个数组。int*p5表示定义一个数组中有5个元素,每个元素是一个指针。此类数组称为指针数组。point*p;p=newpoint;p=newpoint(1,2);,.,201,5.5数组和类定义对象的指针数组point*p3;p0=newpoint(1,2);p1=newpoint(3,4);p2=newpoint(5,6);通过p0使用p0指向的对象。p0-show();可通过循环使用pi指向的对象。,.,202,5.5数组和类定义指向对象的指针数组,并初始化。point*p3=newpoint(1,2),newpoint(3,4),newpoint(5,6);,.,203,5.6指向成员函数的指针函数被调用时需要调入内存函数有地址:存放函数的内存单元的首地址指针可以存放地址存放函数地址的指针称为指向函数的指针定义形式:类型(*指针名)(参数类型);,.,204,5.6指向成员函数的指针intmax(inta,intb)returnab?a:b;voidmain()int(*p)(int,int);p=max;(*p)(1,2);,.,205,5.6指向成员函数的指针若max函数是某类A的成员函数则:intA:max(inta,intb)returnab?a:b;voidmain()int(A:*p)(int,int);Aa;p=A:max;a.(*p)(1,2);,.,206,5.7求解一元二次方程利用C实现设计类,定义类,定义main函数定义对象,利用对象调用成员函数执行,.,207,设计类类的对象中应能存放相关数据:具有数据成员a,b,c一元二次方程的三个系数x1,x2存放求得的方程解delta存放b*b-4*a*c类的对象应能完成计算功能:具有成员函数1,将数据存入数据成员的函数2,显示结果的函数3,计算x1,x2的函数,.,208,定义类,.,209,设计类,定义类的成员函数,.,210,main函数,.,211,main函数,.,212,main函数,.,213,main函数,.,214,main函数,.,215,第五章复习,构造函数定义:classAintapublic:A(intx):a(x)A(intx)a=x;,const限定的数据成员初始化必须用?形式?还有什么数据成员必须用此种形式初始化?,const限定的数据成员和引用数据成员初始化必须使用初始化列表形式。,.,216,静态成员不依赖于对象而存在。静态数据成员:定义时加static静态成员必须初始化使用语句:intA:b=0;静态对象:static对象一旦定义存在于内存中,直到程序结束才释放内存。,.,217,静态成员不依赖于对象而存在。静态成员使用注意:非静态对象静态成员可否使用?静态对象静态成员可否使用?静态对象非静态成员可否使用?静态成员函数非静态成员可否使用?非静态成员函数静态成员可否使用?,.,218,静态成员不依赖于对象而存在。其他注意事项:p1081-7静态函数没有this指针不能声明为virtual函数,.,219,友元普通函数作友元类的成员函数作友元类作友元类A的友元(函数,成员函数,类)可以访问类A中的所有成员,但必须通过对象或引用来访问。友元应在类A中利用friend声明,.,220,const对象const数据成员const成员函数const指针const变量const引用加const限定后不可改变,任何企图改变都导致错误,并应注意他们的初始化!,.,221,使用规则:const对象不能调用任何非const成员函数const成员函数只能调用const成员函数非const对象可以调用const成员函数非const对象可以使用const数据成员const成员函数中不能使用任何试图改变变量值的语句。,.,222,数组和类类可以定义对象类可以定义对象数组对象数组中的每个元素都是对象,其使用方式和对象的使用方式相同。对象数组名表示数组的首地址可以定义指向对象的指针p使其指向某个对象可以用指针p指向数组中的元素,.,223,对象的指针数组使用函数指针定义形式:int(*p)(int,int);int(A:*P)(int,int);intmax(inta,intb)intA:max(inta,intb),.,224,习题五-1,.,225,习题五-1,.,226,习题五-1,.,227,习题五-1,.,228,习题五-1,.,229,习题五-4,.,230,习题五-4,.,231,第六章继承和派生,6.1继承和派生的基本概念继承关系是类与类之间的类属关系类:人类:学生类:教师在已有类的基础上定义新的类称为类的派生,新产生的类为派生类,原来的类为基类。(一般与特殊的关系),.,232,6.1继承和派生的基本概念继承关系是类与类之间的类属关系类:人类:学生类:教师从成员构成来看,派生类具有基类的所有成员,基类又叫父类,派生类又叫子类。,.,233,6.1继承和派生的基本概念类的继承是指:派生类继承基类的所有数据成员和成员函数。用于表示类间的类属关系。非构成关系。派生类的特点:1,增加新成员。2,重定义已有成员函数。3,改变基类的成员的访问权限。,.,234,6.1继承和派生的基本概念,人,学生,教师,姓名、年龄、性别。,.,235,6.2单一继承,6.2.1一般形式class派生类名:访问控制基类名private:成员列表;public:成员列表;protected:成员列表;,.,236,6.2单一继承,6.2.2派生类的构造函数和析构函数派生类中继承的基类的成员初始化时,需要由派生类的构造函数调用基类的构造函数。派生类的构造函数一般形式:派生类名:派生类名(参数):基类名(参数)/函数体构造函数和析构函数不能被继承。,.,237,6.2单一继承,类的派生实例有类human对象用于存放人的相关信息:姓名,年龄,性别并能利用成员函数实现相关信息输出。在此基础上定义类student类,具有学号、班级信息,并能完成信息的输出显示。定义类,并设计测试程序。,.,238,6.2.2派生类的构造函数和析构函数,.,239,6.2.2派生类的构造函数和析构函数,.,240,6.2.2派生类的构造函数和析构函数,.,241,6.2.2派生类的构造函数和析构函数运行结果:,问题:在student类中能否直接使用human类中的name,sex,age等成员?,.,242,6.2.2派生类的构造函数和析构函数,此时程序无法运行!,.,243,6.2.2派生类的构造函数和析构函数,类A定义中由private限定的成员只能在类A中使用。student虽然是human的派生类也不可使用human类中的private成员,所以在student中定义的show函数不可使用human中的name,sex,age等私有成员。,.,244,6.2.3类的保护成员protected,公有派生得到的派生类不能使用基类的私有成员。那么如何解决派生类中访问基类的成员呢?并且不能打破封装性:基类的对象仍不可使用这些成员。,.,245,6.2.3类的保护成员protected,公有派生得到的派生类不能使用基类的私有成员。protected限定的成员具有公有和私有双重性质该类成员在派生类中可访问,其他非成员函数不可访问。,.,246,6.2.3类的保护成员protected,.,247,6.2.3类的保护成员protected,.,248,6.2.3类的保护成员protected,.,249,6.2.3类的保护成员protected,公有派生得到的派生类不能使用基类的私有成员。protected限定的成员具有公有和私有双重性质该类成员在派生类中可访问,其他函数不可访问。,.,250,复习上节,基类、派生类、继承派生类的特点:1,增加新成员2,重定义已有函数3,改变成员访问权限,.,251,复习上节,派生类的定义形式:,class派生类名:访问控制基类名private:成员列表;public:成员列表;protected:成员列表;,.,252,复习上节,派生类的定义形式:,公有派生的特点:派生类中可访问基类中的protected成员派生类中可访问基类中的public成员派生类中不可访问基类中的private成员,.,253,复习上节,公有派生和保护成员,protected限定的成员具有公有和私有双重性质在基类中是私有的,在派生类中可访问。问题:1,基类的对象是否可访问protected成员?2,派生类的对象是否可访问公有派生类中继承自基类的protected成员?3,基类的成员函数是否可访问基类中的protected成员?4,派生类的成员函数是否可访问公有派生类中继承自基类的protected成员?,.,254,复习上节,派生类的构造函数和析构函数:,派生类的构造函数不能由基类继承而得派生类的构造函数一般形式:派生类名:派生类名(参数):基类名(参数)/函数体,.,255,复习上节,派生类的构造函数和析构函数:,当产生一个派生类对象时,首先调用基类的构造函数,然后调用派生类的构造函数。当释放一个派生类对象时,首先调用派生类的析构函数,然后调用基类的析构函数。,.,256,6.2.3类的保护成员protected,.,257,6.2.4访问权限,1,公有派生和赋值兼容规则a,基类的公有成员在派生类中仍是公有的。b,基类的保护成员在派生类中仍是保护的。c,基类的私有成员在派生类中是不可访问的。d,基类的不可访问成员在派生类中仍不可访问。,什么是类的不可访问成员?例如:若human类中name是private的,则,student类不可访问若student做某个类A的基类时,类A仍不可访问name,.,258,6.2.4赋值兼容规则,基类对象和派生类对象的相互赋值。,每个学生都是人。说明:student类的每个对象都是human类的对象。每个人不一定是学生。说明:human类的每个对象不一定是student类的对象。,.,259,6.2.4赋值兼容规则,基类对象和派生类对象的相互赋值。,每个学生都是人。说明:student类的每个对象都是human类的对象。a,派生类的对象可赋值给基类的对象。b,派生类的对象可以初始化基类的引用c,派生类的对象地址可赋值给基类的指针此时基类的引用或指针只能访问派生类中继承自基类的成员。,.,260,6.2.4赋值兼容规则,a,派生类的对象可赋值给基类的对象。b,派生类的对象可以初始化基类的引用c,派生类的对象地址可赋值给基类的指针此时基类的对象、引用或指针只能访问派生类中继承自原基类的成员。,ph-show();,.,261,6.2.4isa和has-a的区别,类与类间的关系:isa关系:继承和派生关系。has-a关系:一个类使用另一个类的对象作成员一般来说:公有继承关系和isa关系是等价的。但某些情况下:企鹅是鸟鸟会飞企鹅会飞吗?对象作成员表示has-a关系,.,262,6.2.4公有继承存取权限表什么是公有继承?,基类,派生类,基类对象,派生类对象,privatepublicprotected,不可访问publicprotected,不可访问可访问不可访问,不可访问可访问不可访问,.,263,6.2.4私有派生定义派生类时,用private限定,class派生类名:private基类名private:成员列表;public:成员列表;protected:成员列表;,.,264,6.2.4私有派生定义派生类时,用private限定,基类的私有成员和不可访问成员在派生类中不可访问基类的公有成员和保护成员变为私有成员,.,265,6.2.4私有派生假定有基类:base,.,266,6.2.4私有派生定义派生类时,用private限定,问题:,.,267,6.2.4私有派生定义派生类时,用private限定,问题:d对象是否可以使用fun1函数?,.,268,6.2.4私有派生定义派生类时,用private限定,基类的私有成员和不可访问成员在派生类中不可访问基类的公有成员和保护成员变为私有成员,派生类的对象不可访问继承自基类的所有成员,派生类的成员函数可访问继承自基类的protected成员和public成员,.,269,6.2.4保护派生定义派生类时,用protected限定,降级使用基类中的private变为不可访问protect变为privatepublic变为protected,.,270,.,271,降级使用基类中的private变为不可访问protected变为privatepublic变为protected,.,272,6.3多重继承一般形式:,class类1:访问控制类2,访问控制类3private:/私有成员protected:/保护成员public:/公有成员,.,273,.,274,多重继承中成员访问权限的变化同单一继承!以下访问是指在派生类的成员函数中使用成员公有派生:基类的private成员在派生类中可否访问?基类的protected成员在派生类中可否访问?基类的public成员在派生类中可否访问?私有派生:基类的private成员在派生类中可否访问?基类的protected成员在派生类中可否访问?基类的public成员在派生类中可否访问?,.,275,多重继承中成员访问权限的变化同单一继承!保护派生:基类的private成员在派生类中可否访问?基类的protected成员在派生类中可否访问?基类的public成员在派生类中可否访问?,.,276,6.4二义性及其支配规则,6.4.1作用域和成员名限定,.,277,6.4二义性及其支配规则,6.4.1作用域和成员名限定,.,278,6.4二义性及其支配规则,6.4.1作用域和成员名限定,.,279,6.4二义性及其支配规则,6.4.1作用域和成员名限定,当派生类中从多个基类中继承得到同名函数时,在派生类中使用这些函数时,须使用类名限定!派生类的对象使用这些函数时,也需要进行类名限定!,类名:成员名,.,280,6.4二义性及其支配规则,6.4.2派生类支配基类的同名函数,.,281,6.4.2派生类支配基类的同名函数,C+的支配规则:在基类和派生类有重名的成员时,优先派生类的成员如果要访问基类成员,必须加上作用域符:私有(private)成员派生类不可以访问,只有本类和友类可以访问如果派生类要访问基类的成员,基类成员应该用protected限定。,.,282,6.4.2派生类支配基类的同名函数,另注意:一个类B不能从类A直接继承2或2次以上,.,283,第六章复习总结,类的单一公有继承、单一私有继承、单一保护继承、多重继承规则派生类的构造函数定义形式,及调用顺序派生类的析构函数调用顺序。protected成员派生类和基类对象的赋值兼容规则二义性及其支配规则(作用域限定),.,284,第七章类模板与向量,7.1类模板,复习内容:函数模板,.,285,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,.,286,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,.,287,3.5函数模板,有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。,.,288,3.5函数模板,函数模板定义格式:,定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。,.,289,3.5函数模板,此种形式调用中称为函数模板的参数一般可省略。Typename可替代class,.,290,3.5函数模板,若某函数参数类型不一致时,也可定义函数模板。,.,291,7.1类模板,7.1.1类模板的基础知识templateclass类名Private:/成员定义Protected:/成员定义Public:/成员定义,.,292,7.1类模板,templateclass类名,类模板的对象:类名对象名(参数);,.,293,7.1类模板,类的成员函数定义(在类体外定义时):,模板类的成员函数定义形式:template返回值类型类名:函数名(参数)/函数体,普通类的成员函数定义形式:返回值类型类名:函数名(参数)/函数体,.,294,7.1类模板,.,295,7.1类模板,.,296,7.1.2类模板的派生与继承,.,297,7.1.2类模板的派生与继承,模板类继承普通类,模板类作普通类的派生类继承后成员使用同一般类的继承。模板类派生模板类模板类使用时,须指出模板类参数,.,298,.,299,7.2向量与泛型算法,7.2.1定义向量列表,向量是C+中一维数组的类版本用于存放多个相同类型的数据。可动态指定向量中元素的个数,并提供了多个成员函数以方便数据使用,同时可使用泛型算法。是C+中的类模板。使用时加头文件vector,.,300,7.2向量与泛型算法,7.2.1定义向量列表,向量的声明形式:vector向量名;vector向量名(长度);vector向量名(长度,a);vector向量名1(向量名2);vector向量名(a,a+长度);(a是数组名),.,301,7.2向量与泛型算法,7.2.1定义向量列表,向量的使用:同类型向量可相互赋值,不同类型不可相互赋值同类向量长度不同也可相互赋值向量中的元素使用类似数组元素,可使用ai向量具有成员函数size()可得到向量长度,.,302,向量的使用:,.,303,向量的使用:,.,304,7.2.2泛型指针,向量成员函数begin(),end(),begin(),end()vectora(10,0);a.begin()表示向量中第0个元素的地址a.end()表示最后一个元素后下一个地址a.rbegin()表示向量中最后一个元素的地址a.rend()表示第一个前一个地址,.,305,7.2.2泛型指针,向量成员函数begin(),end(),rbegin(),rend()可以取得向量中某个元素地址指针可以存放地址注意:指针类型必须同向量类型一致,.,306,7.2.2泛型指针,.,307,7.2.2泛型指针,输出向量元素向量使用时类似数组使用:,.,308,7.2.2泛型指针,输出向量元素利用向量的成员函数输出向量元素,.,309,7.2.2泛型指针,输出向量元素利用向量的成员函数输出向量元素,.,310,7.2.2泛型指针,输出向量元素利用向量的成员函数输出向量元素,.,311,7.2.2泛型指针,利用普通指针指向向量的首元素地址,利用指针输出向量元素。,.,312,7.2.2泛型指针,类模板vector中提供了一个通用指针iterator可使用vector:iterator指针名形式定义一个指向向量的指针该指针可指向向量中的元素。,.,313,.,314,7.2.2泛型指针,类模板vector中提供了一个通用指针reverse_iterator可使用vector:reverse_iterator指针名形式定义一个指向向量的指针该指针可指向向量中的元素。,.,315,.,316,特别注意(总结)向量不是数组!向量名不是数组名,不表示地址!也不可使用不可使用如此形式!,.,317,特别注意(总结)向量的成员函数begin()+1,表示下一个地址end()-1表示前一个地址rbegin()+1表示前一个地址rend()-1表示下一个地址,.,318,特别注意:(总结)reverse_iterator指针变量只能被赋值为c.rbegin(),c.rend()int*p;或者vector:reverse_iteratorp;p=c.rbegin()此形式错误!p=c.rend()此形式错误!p=c.begin()正确p=c.end()正确,.,319,特别注意:(总结)普通指针变量和iterator指针变量只能被赋值为c.begin(),c.end()int*p;或者vector:iteratorp;p=c.rbegin()此形式错误!p=c.rend()此形式错误!p=c.begin()正确p=c.end()正确,.,320,7.2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商场安全卫士培训方案课件
- 压力灭菌器安全培训证书课件
- 2025年医疗器械行业远程医疗设备市场前景预测报告
- 2025年循环经济行业发展模式探索与市场前景研究报告
- 孟连傣族拉祜族佤族自治县2025云南普洱市孟连县教体系统事业单位急需紧缺人才第二轮招聘2人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国人民大学财务处招聘3人笔试历年参考题库附带答案详解
- 2025重庆轨道集团招聘130人笔试参考题库附带答案详解
- 2025福建泉州晋江市佳豪置业发展有限公司招聘编外3人笔试参考题库附带答案详解
- 2025浙江余姚景隆置业有限公司招聘7人笔试参考题库附带答案详解
- 2025河北中核二四劳务有限公司招聘200人笔试参考题库附带答案详解
- 华为信息安全管理培训课件
- 诗经整本书阅读课件
- (2025年标准)预售小麦协议书
- 2025年院感测试题及答案
- 承包商全流程安全培训
- 养生店国庆节活动方案
- 7.1促进民族团结 课件 2025-2026学年统编版道德与法治九年级上册
- 2025年建筑施工安全教育试题及答案
- 桩基质量管理制度
- 口腔颌面外科缝合技术要点
- 2025至2030中国军用导航仪器行业市场深度研究与战略咨询分析报告
评论
0/150
提交评论