ImageVerifierCode 换一换
格式:PPTX , 页数:59 ,大小:238.50KB ,
资源ID:4621423      下载积分:16 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4621423.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(高等教育面向对象复习2012信工.pptx)为本站上传会员【精***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

高等教育面向对象复习2012信工.pptx

1、第 2 2 页n 面向对象的概述面向对象的概述n 类及其对象的封装性类及其对象的封装性n 友员、重载和引用友员、重载和引用n 继承与派生继承与派生n 虚函数与多态性虚函数与多态性n 模板模板面向对象设计复习重点面向对象设计复习重点第 3 3 页面向对象的设计方法面向对象的设计方法1 面向对象的思想面向对象的思想2 面向对象的基本概念面向对象的基本概念3 面向对象的基本特性面向对象的基本特性4 C+的初步知识的初步知识第 4 4 页本章要求本章要求l熟悉面向对象的思想;熟悉面向对象的思想;l理解面向对象的基本概念:理解面向对象的基本概念:对象、类;对象、类;l掌握面向对象的基本特性:封装性的特点

2、掌握面向对象的基本特性:封装性的特点,继承性的优点和多态性的含义;继承性的优点和多态性的含义;l掌握掌握C+比比C增强的知识:函数原型与变量增强的知识:函数原型与变量说明、输入输出、说明、输入输出、const说明符和说明符和void类型。类型。第 5 5 页面向对象的基本概念面向对象的基本概念l 对象l 类第 6 6 页面向对象的基本特性面向对象的基本特性l封装性封装性l继承性继承性l多态性多态性第 7 7 页l函数原形说明函数原形说明l变量的说明变量的说明l输入输出输入输出lconst说明符说明符lvoid类型类型从从C到到C+第 8 8 页 const说明符说明符l定义常量时,定义常量时

3、C语言用语言用#define,而而C+用用const说明符,说明符,const在在C+中的作用:中的作用:1.代替代替#define宏定义常量宏定义常量 例:例:#define MAX 100 可替代为:可替代为:const int MAX=100;或或 int const MAX=100;2.定义常量数组定义常量数组 const float data=1.2,2.5,3.6,4.8,5.5;第 9 9 页 const说明符说明符3.const说明符与函数参数相连接说明符与函数参数相连接例:例:void print_value(const int value)coutvalue;试图在该函数

4、体中改变试图在该函数体中改变const参量参量value的是非法的。的是非法的。第 1010 页const说明符说明符4.定义指针常量,根据定义指针常量,根据const位置的位置的不同含义也不同,有三种方式不同含义也不同,有三种方式:(1)指向常量的指针:指向常量的指针:说明一个指针变量指向的数说明一个指针变量指向的数据是常量据是常量。(。(name是指向字符串常量的指针,是指向字符串常量的指针,name指向的字符串不能更改,但指向的字符串不能更改,但name可以更新)可以更新)const char*name=“Richard”;name=“Martin”;对对 name0=C;错错第 111

5、1 页 const说明符说明符(2)常指针常指针:把指针本身声明为一个常量,而不是将把指针本身声明为一个常量,而不是将它指向的对象声明为常量它指向的对象声明为常量。(。(name不能更改,不能更改,name指向的内容可更新指向的内容可更新)char*const name=“Richard”;name=“Martin”;错错 name0=C;对对(3)指向常量的常指针指向常量的常指针:这个指针本身不能改变,它指这个指针本身不能改变,它指向的值也不能改变。向的值也不能改变。(name不能更改,不能更改,name指向指向的内容也不能更新的内容也不能更新)const char*const name=“

6、Richard”;name=“Martin”;错错 name0=C;错错第 1212 页C+类及其对象的封装性类及其对象的封装性1 类的声明和对象定义类的声明和对象定义2 类的成员函数类的成员函数3 对象成员的引用对象成员的引用4 构造函数和析构函数构造函数和析构函数5 对象指针对象指针6 动态存储动态存储第 1313 页l掌握类的定义和使用方法。类的声明包括掌握类的定义和使用方法。类的声明包括数据数据(数据成员数据成员)和函数和函数(成员函数成员函数);私有;私有成员和公有成员;成员和公有成员;l掌握对象的定义和使用方法;掌握对象的定义和使用方法;l掌握对象的存储空间及成员函数的存储方掌握对

7、象的存储空间及成员函数的存储方式,对象的存储空间只计算数据成员的存式,对象的存储空间只计算数据成员的存储空间;储空间;l构造函数对对象初始化;构造函数与类同构造函数对对象初始化;构造函数与类同名,可以接受参数,允许重载。构造函数名,可以接受参数,允许重载。构造函数不能显式调用;不能显式调用;本章要求本章要求第 1414 页l析构函数执行与构造函数相反的操作,完析构函数执行与构造函数相反的操作,完成某些清理内存的任务,例如释放对象占成某些清理内存的任务,例如释放对象占用的内存空间;用的内存空间;lnew申请存储空间,申请存储空间,delete释放用释放用new申申请的存储空间,配对使用。请的存储

8、空间,配对使用。l动态创建对象动态创建对象本章要求本章要求第 1515 页 缺省参数的构造函数缺省参数的构造函数l部分参数缺省时,规则是:部分参数缺省时,规则是:所有取缺省值的参数必须出现在不取缺所有取缺省值的参数必须出现在不取缺省值的参数的右边。即所有的缺省参数省值的参数的右边。即所有的缺省参数是参数表中最后的参数。是参数表中最后的参数。第 1616 页point(int x,int y=0);point(int x,int y=0);对对point(int x=0,int y);point(int x=0,int y);错错void f1(int i,int j,int k=10);voi

9、d f1(int i,int j,int k=10);对对void f2(char*str,int x=-1,int y=-1);void f2(char*str,int x=-1,int y=-1);对对void f3(int i,int j=10,int k);void f3(int i,int j=10,int k);错错第 1717 页多构造函数多构造函数l在一个类中有几个构造函数,适合不同在一个类中有几个构造函数,适合不同的场合,用它们所带参数的个数或类型的场合,用它们所带参数的个数或类型的不同而区分。的不同而区分。l定义多构造函数时,参数的个数或类型定义多构造函数时,参数的个数或类

10、型上必须存在差异,否则会有二义性。上必须存在差异,否则会有二义性。l在定义多个构造函数,又使用缺省参数在定义多个构造函数,又使用缺省参数时,特别要注意防止出现二义性。时,特别要注意防止出现二义性。第 1818 页 使用缺省参数的构造函数注意:使用缺省参数的构造函数注意:l在构造函数中使用缺省参数提供了建立对象的在构造函数中使用缺省参数提供了建立对象的多种初始化方法,相当于多个重载的构造函数;多种初始化方法,相当于多个重载的构造函数;l应该在声明构造函数时指定参数的缺省值,而应该在声明构造函数时指定参数的缺省值,而不能只在定义构造函数时指定缺省值;不能只在定义构造函数时指定缺省值;l如果构造函数

11、的全部参数都指定了缺省值,则如果构造函数的全部参数都指定了缺省值,则在定义对象时可以不给出,或给出一个、几个在定义对象时可以不给出,或给出一个、几个实参;实参;l在一个类中定义了全部缺省参数的构造函数后,在一个类中定义了全部缺省参数的构造函数后,不能再定义重载构造函数,否则会出现二义性。不能再定义重载构造函数,否则会出现二义性。Box(int=10,int=10,int=10);/指定全部参数为缺省参数指定全部参数为缺省参数Box();/声明无参构造函数,是重载构造函数声明无参构造函数,是重载构造函数Box(int,int);/声明有声明有2个参数的构造函数个参数的构造函数若有以下语句:若有以

12、下语句:Box box1;/无法确定调用第无法确定调用第1个、还是第个、还是第2个构造函数?个构造函数?Box box2(15,30);/无法确定调用第无法确定调用第1个、还是第个、还是第3个构造函数?个构造函数?第 1919 页 动态存存储lC+C+使用使用newnew来动态分配存储空间,使用来动态分配存储空间,使用deletedelete来动态释放存储空间。来动态释放存储空间。l优点:优点:lnewnew自动计算自动计算要分配的类型的大小,要分配的类型的大小,l自动返回正确的指针类型自动返回正确的指针类型,不必对返回,不必对返回指针进行类型转换指针进行类型转换l可以用可以用newnew将分

13、配的对象初始化。将分配的对象初始化。第 2020 页 new的的语法格式法格式l名字指针名字指针=new new 名字(名字初始化值)名字(名字初始化值)int*s;int*s;s=new int(200);s=new int(200);l若用若用newnew分配的类型为数组,需要在类型名后分配的类型为数组,需要在类型名后缀上数组的大小,缀上数组的大小,如如:int*p=new int10;int*p=new int10;l若创建多维数组,若创建多维数组,必须必须提供所有维的大小提供所有维的大小如:如:int*q=a234;int*q=a234;第 2121 页 delete的的语法格式法格式

14、ldelete delete 名字指针名字指针l名字指针是指将要被释放的那一块存储名字指针是指将要被释放的那一块存储空间的起始地址,此存储空间一定是用空间的起始地址,此存储空间一定是用newnew分配的。分配的。l若所释放的是整个数组占用的空间,可若所释放的是整个数组占用的空间,可写成写成delete p;delete p;释放时不需给出数组的释放时不需给出数组的大小。大小。第 2222 页 析构函数析构函数 l析构函数一般用于收回对象中成员所占析构函数一般用于收回对象中成员所占的存储空间。的存储空间。l析构函数名字与类名相同,只是在前面析构函数名字与类名相同,只是在前面加了一个符号加了一个符

15、号“”。它不接受任何参数,。它不接受任何参数,也不返回任何说明的类型和值。也不返回任何说明的类型和值。l一般析构函数由一系列的一般析构函数由一系列的delete delete 组成组成。第 2323 页友元、重友元、重载和引用和引用l友元友元(friend):):即类的朋友,不即类的朋友,不同类的成员函数之间、类的成员函同类的成员函数之间、类的成员函数与一般函数进行数据共享的机制;数与一般函数进行数据共享的机制;l重载重载(overloading):):同一同一“符符号号”在同一作用域的不同场合具有在同一作用域的不同场合具有不同的语义(实现算法);不同的语义(实现算法);l引用引用(refer

16、ence):):即对象的别即对象的别名。名。第 2424 页本章要求本章要求l友元:打破了类的数据封装机制,允许类以外的友元:打破了类的数据封装机制,允许类以外的函数可以访问类对象的私有数据,友元分为友员函数可以访问类对象的私有数据,友元分为友员函数、友元成员和友元类。使用时注意友元的声函数、友元成员和友元类。使用时注意友元的声明和定义;明和定义;l重载:是重载:是C+的多态性,同一标识符在不同的场的多态性,同一标识符在不同的场合具有不同的语义。函数重载有构造函数重载、合具有不同的语义。函数重载有构造函数重载、成员函数和非成员函数重载;运算符重载有种形成员函数和非成员函数重载;运算符重载有种形

17、式:重载为类的成员函数和重载为类的友元函数。式:重载为类的成员函数和重载为类的友元函数。l引用:即对象的别名,在创建引用时初始化,且引用:即对象的别名,在创建引用时初始化,且不能再赋值。对引用的操作就是对目标的操作,不能再赋值。对引用的操作就是对目标的操作,用引用传递参数可改变实参的值,用引用传递对用引用传递参数可改变实参的值,用引用传递对象对象可节省内存,引用函数可被赋值。象对象可节省内存,引用函数可被赋值。第 2525 页友元的友元的说明和定明和定义l将外界的某个对象说明为某一个类的友将外界的某个对象说明为某一个类的友员,这个外界对象就可以访问这个类对员,这个外界对象就可以访问这个类对象中

18、的私有成员。象中的私有成员。l声明为友员的外界对象既可以是另一个声明为友员的外界对象既可以是另一个类的类的成员函数成员函数,也可以是不属于任何类,也可以是不属于任何类的的一般的函数一般的函数,还可以是整个的,还可以是整个的一个类一个类l友员声明包含在其私有成员可被访问的友员声明包含在其私有成员可被访问的类的定义中。此声明可放在公有部分,类的定义中。此声明可放在公有部分,也可放在私有部分。也可放在私有部分。第 2626 页友元函数友元函数l在一个类中说明的某个函数不是该类的在一个类中说明的某个函数不是该类的成员函数,而是独立于任何类的一般的成员函数,而是独立于任何类的一般的外界函数,它可以访问该

19、类中所有对象外界函数,它可以访问该类中所有对象的私有成员。的私有成员。l定义时,在函数名前加上关键词定义时,在函数名前加上关键词friendfriend第 2727 页 友元友元类l友元可以是一个类。友元可以是一个类。l作为友元的类中的所有成员函数都可以作为友元的类中的所有成员函数都可以访问另一个类中的私有成员。访问另一个类中的私有成员。第 2828 页函数重函数重载l两个以上的函数,只要使用不同类型的两个以上的函数,只要使用不同类型的参数或参数个数不同,编译器便知道在参数或参数个数不同,编译器便知道在什么情况下该调用哪一个函数,这就叫什么情况下该调用哪一个函数,这就叫函数重载。函数重载。l构

20、造函数重载构造函数重载l类成员函数重载类成员函数重载l类以外的一般函数重载类以外的一般函数重载第 2929 页运算符重运算符重载l用成员函数重载运算符用成员函数重载运算符l用友元重载运算符用友元重载运算符l运算符运算符 和()的重载和()的重载l赋值运算符的重载赋值运算符的重载第 3030 页引用引用l引用的概念引用的概念l引用参数引用参数l引用返回值引用返回值第 3131 页引用的概念引用的概念l引用就是给对象取一个别名,它主要用引用就是给对象取一个别名,它主要用在给函数传递大型的对象,从函数中返在给函数传递大型的对象,从函数中返回左值,也可以独立引用。回左值,也可以独立引用。l引用定义的关

21、键词是引用定义的关键词是type&type&int i;int i;int&j=i;int&j=i;创建了一个整型引用创建了一个整型引用j j,j j是是i i的地址的别的地址的别名,名,j j是是i i的同义词,它们表示同一个对的同义词,它们表示同一个对象。象。第 3232 页 在定义引用时,马上就要对它进行初始化,在定义引用时,马上就要对它进行初始化,不可定义完后再赋值。不可定义完后再赋值。对对象或对引用的任何操作都会影响到它对对象或对引用的任何操作都会影响到它们共同的对象。们共同的对象。引用一旦被初始化,就不能再重新赋值。引用一旦被初始化,就不能再重新赋值。需要注意的问题需要注意的问题第

22、 3333 页继承与派生继承与派生1 继承与派生的概念继承与派生的概念2 派生类的声明方式派生类的声明方式3 派生类的构成派生类的构成4 派生类成员函数的访问属性派生类成员函数的访问属性5 派生类的构造函数和析构函数派生类的构造函数和析构函数6 多继承多继承7 虚基类虚基类第 3434 页l理解继承与派生的概念,理解继承与派生的概念,掌握掌握单继承和多继单继承和多继承的定义方式;承的定义方式;l掌握继承的几种方式:掌握继承的几种方式:public继承、继承、private继承和继承和protected继承,以及在不同继承方式继承,以及在不同继承方式下基类成员在派生类中的访问属性的差别;下基类成

23、员在派生类中的访问属性的差别;l熟悉派生类构造函数的定义和执行顺序;熟悉派生类构造函数的定义和执行顺序;l掌握多继承的概念和定义,多继承构造函数掌握多继承的概念和定义,多继承构造函数的定义与执行顺序,注意多继承的二义性;的定义与执行顺序,注意多继承的二义性;l掌握虚基类的定义和初始化。掌握虚基类的定义和初始化。本章要求本章要求第 3535 页派生派生类对基基类成成员的的访问权l基类的基类的私有成员私有成员派生类及派生类的使用派生类及派生类的使用者都者都无权访问无权访问。l对于基类的公有成员的访问权,在定义对于基类的公有成员的访问权,在定义派生类时,定义的方式不同,权限也不派生类时,定义的方式不

24、同,权限也不同。同。第 3636 页 私有派生私有派生l由由私有派生私有派生得到的派生类,对它的基类得到的派生类,对它的基类的公有成员只能是的公有成员只能是私有继承私有继承,基类的所,基类的所有公有成员都只能成为私有派生类的有公有成员都只能成为私有派生类的私私有成员有成员,这些私有成员只能被派生类的,这些私有成员只能被派生类的成员函数访问,而派生类的使用者无权成员函数访问,而派生类的使用者无权访问。访问。第 3737 页 公有派生公有派生l基类中所有的公有成员在派生类中也都基类中所有的公有成员在派生类中也都是公有的。是公有的。l公有派生在定义派生类时,在基类标识公有派生在定义派生类时,在基类标

25、识符前加一个符前加一个publicpublic关键词。关键词。第 3838 页保保护派生派生l基类的基类的protectedprotected成员只能被其派生类的成员只能被其派生类的成员访问,不能被派生类的外部对象访成员访问,不能被派生类的外部对象访问。问。第 3939 页派生派生类的构造函数的构造函数l在两种情况下,必须定义派生类的构造函在两种情况下,必须定义派生类的构造函数数 派生类本身需要构造函数派生类本身需要构造函数 在定义派生类对象时,其相应的基类对象在定义派生类对象时,其相应的基类对象需调用带有参数的构造函数。需调用带有参数的构造函数。在定义对象时构造函数的执行顺序是:先祖在定义对

26、象时构造函数的执行顺序是:先祖先(基类),再客人(对象成员),后自己先(基类),再客人(对象成员),后自己(派生类本身)(派生类本身)第 4040 页在定义对象时构造函数的执行顺序是:在定义对象时构造函数的执行顺序是:先祖先(基类),再客人(对象成员),先祖先(基类),再客人(对象成员),后自己(派生类本身)后自己(派生类本身)第 4141 页派生派生类的析构函数的析构函数l在派生类中是否要定义析构函数与它所属的基在派生类中是否要定义析构函数与它所属的基类无关。类无关。l若派生类在退出定义域前有数据需做善后工作,若派生类在退出定义域前有数据需做善后工作,就需定义析构函数。基类的析构函数不会因就

27、需定义析构函数。基类的析构函数不会因为派生类没有析构函数而得不到执行。为派生类没有析构函数而得不到执行。l派生类的析构函数的执行顺序正好与构造函数派生类的析构函数的执行顺序正好与构造函数的执行顺序相反:先自己(派生类本身),的执行顺序相反:先自己(派生类本身),再客人(对象成员),后祖先(基类)再客人(对象成员),后祖先(基类)第 4242 页多多继承构造函数的定承构造函数的定义l多继承的构造函数的定义与单继承的相多继承的构造函数的定义与单继承的相似,只是几个基类的构造函数之间用似,只是几个基类的构造函数之间用“,”分隔。分隔。派生类名:派生类名(参数表):基类派生类名:派生类名(参数表):基

28、类1 1(参数表(参数表1 1),),基类基类n n(参数表参数表n n),),对象成对象成员员1 1(参数表(参数表1 1),),对象成员对象成员1 1(参数表(参数表1 1)/第 4343 页多多继承构造函数的承构造函数的执行行顺序序先祖先(基类),再客人(成员对象),先祖先(基类),再客人(成员对象),后自己(派生类),在多个基类之间严格按后自己(派生类),在多个基类之间严格按照派生定义时从左到右的顺序来排列先后。照派生定义时从左到右的顺序来排列先后。多继承的析构函数的调用顺序多继承的析构函数的调用顺序与构造函数的调用顺序正好相反。与构造函数的调用顺序正好相反。第 4444 页虚基虚基类

29、l虚基类的概念虚基类的概念l虚基类的初始化虚基类的初始化第 4545 页虚基虚基类的概念的概念l当在多条继承路径上有一个公共的基类,当在多条继承路径上有一个公共的基类,在这些路径的汇合处,这个公共的基类在这些路径的汇合处,这个公共的基类就会产生多个实例(或多个副本),若就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将只想保存这个基类的一个实例,可以将这个公共基类说明为这个公共基类说明为虚基类虚基类。l定义方法:在定义派生类时,在需定义定义方法:在定义派生类时,在需定义为虚基类的基类描述前加上为虚基类的基类描述前加上virtualvirtual关键关键词。词。第 4646 页

30、虚基虚基类的初始化的初始化l虚基类的初始化与一般构造函数的初始化在语虚基类的初始化与一般构造函数的初始化在语法上是一样的,但构造函数的法上是一样的,但构造函数的调用次序不同调用次序不同。l派生类构造函数的调用次序,原则有三:派生类构造函数的调用次序,原则有三:1.1.虚基类的构造函数在非虚基类之前调用虚基类的构造函数在非虚基类之前调用 2.2.若同一层次中包含多个虚基类,这些虚基若同一层次中包含多个虚基类,这些虚基 类的构造函数按它们说明的次序调用类的构造函数按它们说明的次序调用 3.3.若虚基类由非虚基类派生而来,则仍然先若虚基类由非虚基类派生而来,则仍然先调用基类的构造函数,再调用派生类的

31、构造函调用基类的构造函数,再调用派生类的构造函数。数。第 4747 页1 多态性多态性2 虚函数虚函数3 纯虚函数与抽象类纯虚函数与抽象类多态性与虚函数多态性与虚函数第 4848 页l多态性的实现有两种:早期联编通过重载实现;多态性的实现有两种:早期联编通过重载实现;滞后联编通过虚函数实现;滞后联编通过虚函数实现;l对象指针:指向基类类型的指针可以指向其公有对象指针:指向基类类型的指针可以指向其公有派生类对象,但只能访问从基类继承的成员;派生类对象,但只能访问从基类继承的成员;l虚函数:用于实现滞后联编,在基类中将成员函虚函数:用于实现滞后联编,在基类中将成员函数声明为数声明为virtual特

32、性,就可以在派生类中对该成特性,就可以在派生类中对该成员函数重新定义(定义原型与基类中的完全相同)员函数重新定义(定义原型与基类中的完全相同),是特殊的函数重载。当基类指针指向派生类时,是特殊的函数重载。当基类指针指向派生类时,即可访问派生类重新定义的函数;即可访问派生类重新定义的函数;l抽象类:是指包含纯虚函数的类,纯虚函数提供抽象类:是指包含纯虚函数的类,纯虚函数提供了抽象类对派生类的接口。纯虚函数是仅在基类了抽象类对派生类的接口。纯虚函数是仅在基类中声明,但必须在派生类中定义不同的实现版本。中声明,但必须在派生类中定义不同的实现版本。本章要求本章要求第 4949 页多多态性性l多态性指不

33、同对象收到相同的消息时产多态性指不同对象收到相同的消息时产生不同的动作。生不同的动作。C+C+支持两种多态性,一支持两种多态性,一种是编译时的多态性,另一种是运行时种是编译时的多态性,另一种是运行时的多态性。的多态性。l编译时的多态性编译时的多态性l运行时的多态性运行时的多态性第 5050 页引入派生引入派生类后的后的对象指象指针l引入派生概念后,任何被说明为指向基类对象引入派生概念后,任何被说明为指向基类对象的指针都可以指向它的的指针都可以指向它的公有派生类公有派生类l可以让指向基类对象的指针指向它的公有派生可以让指向基类对象的指针指向它的公有派生的对象,若指向私有派生的对象则的对象,若指向

34、私有派生的对象则被禁止被禁止。l不能将一个声明为指向派生类对象的指针指向不能将一个声明为指向派生类对象的指针指向其基类的一个对象。其基类的一个对象。l声明为指向基类对象的指针,当其指向派生类声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问对象时,只能利用它来直接访问派生类中从基派生类中从基类继承来的成员类继承来的成员,不能访问公有派生类中特定,不能访问公有派生类中特定的成员。的成员。第 5151 页虚函数的定虚函数的定义及其使用及其使用l虚函数的定义在基类中进行,它在基类中需虚函数的定义在基类中进行,它在基类中需要定义为虚函数的成员函数的声明中冠以关要定义为虚函数的成员函数

35、的声明中冠以关键词键词 virtualvirtual。l基类中某成员函数声明为虚函数后,此虚函基类中某成员函数声明为虚函数后,此虚函数可以在一个或多个派生类中被重新定义。数可以在一个或多个派生类中被重新定义。l虚函数重新定义时,虚函数重新定义时,不需要不需要virtualvirtual声明。声明。l重新定义时,函数原形,包括返回类型、函重新定义时,函数原形,包括返回类型、函数名、参数个数、参数类型的顺序,必须与数名、参数个数、参数类型的顺序,必须与基类中的原型基类中的原型完全一致完全一致。第 5252 页虚函数与重虚函数与重载函数的关系函数的关系l一般的函数重载,函数的返回类型及所带的参一般的

36、函数重载,函数的返回类型及所带的参量可以不同,仅是函数名相同即可。量可以不同,仅是函数名相同即可。l重载虚函数时,要求函数名、返回类型、参量重载虚函数时,要求函数名、返回类型、参量个数、参量类型和顺序都与基类中原型完全一个数、参量类型和顺序都与基类中原型完全一样。若有不同,按如下处理:样。若有不同,按如下处理:1.1.仅仅仅仅返回类型不同返回类型不同,其余均同,其余均同,作出错处作出错处理。理。2.2.函数原型不同,函数原型不同,仅函数名相同仅函数名相同,系统会将它认,系统会将它认为是一般的函数重载,将为是一般的函数重载,将丢失虚特性丢失虚特性。第 5353 页多多继承中的虚函数承中的虚函数l

37、若派生类由多个基类派生的,对派生类中的若派生类由多个基类派生的,对派生类中的同一个成员函数,有时体现为虚函数,有时同一个成员函数,有时体现为虚函数,有时则只是其某个基类成员的重载函数。则只是其某个基类成员的重载函数。l虚特性可以传递。虚特性可以传递。l注意:指向派生类的指针不能继承。即:基注意:指向派生类的指针不能继承。即:基类的指针可以指向它的派生类,但不能指向类的指针可以指向它的派生类,但不能指向它的派生类的派生类。它的派生类的派生类。第 5454 页 纯虚函数的概念虚函数的概念l纯虚函数是一个在基类中说明的虚函纯虚函数是一个在基类中说明的虚函数,它数,它在该基类中没有定义在该基类中没有定

38、义,但要求,但要求任何任何派生类都必须定义派生类都必须定义自己的版本。自己的版本。纯虚函数的定义形式:纯虚函数的定义形式:virtual type funcname(virtual type funcname(参数表参数表)=0;)=0;第 5555 页抽象抽象类的概念的概念l若一个类中至少有一个纯虚函数,那么就称该类若一个类中至少有一个纯虚函数,那么就称该类为为抽象类抽象类。l对抽象类的使用有几点规定:对抽象类的使用有几点规定:l抽象类只能用作其它类的基类,不能建立抽象类抽象类只能用作其它类的基类,不能建立抽象类对象。对象。l抽象类不能用作参数类型、函数返回类型或显式抽象类不能用作参数类型、

39、函数返回类型或显式转换的类型。转换的类型。l可以声明指向抽象类的指针和引用,此指针和引可以声明指向抽象类的指针和引用,此指针和引用可以指向它的派生类,进而实现多态性。用可以指向它的派生类,进而实现多态性。模板的概念模板的概念函数模板函数模板类模板类模板模板模板第 5757 页l模板:旨在于完成一些通用算法,如数据结模板:旨在于完成一些通用算法,如数据结构中的栈操作、排序操作和树操作。这些操构中的栈操作、排序操作和树操作。这些操作在不同的应用中有不同的数据类型。采用作在不同的应用中有不同的数据类型。采用模板功能后,即可在模板内将数据类型抽象模板功能后,即可在模板内将数据类型抽象为一种广泛类型,在

40、忽略数据类型差异的情为一种广泛类型,在忽略数据类型差异的情况下设计模板,只需要考虑具体算法。反之,况下设计模板,只需要考虑具体算法。反之,用户使用模板时需要用特定的数据类型代替用户使用模板时需要用特定的数据类型代替模板中的抽象数据类型,而不必考虑具体的模板中的抽象数据类型,而不必考虑具体的算法;算法;本章要求本章要求第 5858 页l函数模板:参数类型、返回值类型或函数体函数模板:参数类型、返回值类型或函数体中使用的类型是通用类型的函数称为函数模中使用的类型是通用类型的函数称为函数模板,它定义了一类函数。函数模板的实例化板,它定义了一类函数。函数模板的实例化和模板函数的重载(两种方法);和模板

41、函数的重载(两种方法);l类模板:数据成员类型、成员函数的参数、类模板:数据成员类型、成员函数的参数、返回值或函数体中使用的类型为通用数据类返回值或函数体中使用的类型为通用数据类型的类称为类模板,它定义了一类类。类模型的类称为类模板,它定义了一类类。类模板可以派生出另一个类模板。板可以派生出另一个类模板。本章要求本章要求第 5959 页l函数调用时的规则:函数调用时的规则:l寻找一个参数完全匹配的函数,如果找到寻找一个参数完全匹配的函数,如果找到了就调用它。了就调用它。l失败后,寻找一个函数模板,使其实例化,失败后,寻找一个函数模板,使其实例化,产生一个匹配的模板函数,找到了,就调产生一个匹配的模板函数,找到了,就调用它。用它。l失败了,再试一试低一级的对函数的重载失败了,再试一试低一级的对函数的重载方法,例如通过类型转换可产生参数匹配方法,例如通过类型转换可产生参数匹配等,若找到了,就调用它。等,若找到了,就调用它。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服