第7单元 面向对象编程-继承与多态-2.ppt
《第7单元 面向对象编程-继承与多态-2.ppt》由会员分享,可在线阅读,更多相关《第7单元 面向对象编程-继承与多态-2.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Unit 7Unit 7第八章第八章 继承与多态继承与多态8.1 8.1 继继承与派生的概念承与派生的概念 8.4 8.4 虚虚基类基类 (选读)(选读)8.3 8.3 多重继承与派生类成员标识多重继承与派生类成员标识(选读选读)8.6 8.6 多态性与虚函数多态性与虚函数 8.5 8.5 派生类应用讨论派生类应用讨论 8.2 8.2 派生类的构造函数与析构函数派生类的构造函数与析构函数 派派生类构造函数的定义:生类构造函数的定义:派生类名派生类名:派生类名(参数总表)派生类名(参数总表):基类名基类名1 1(参数名表(参数名表1 1),基类名基类名2 2(参数名表(参数名表2 2),),基类
2、名,基类名n n(参数名表(参数名表n n),成员对象名成员对象名1 1(成员对象参数名表(成员对象参数名表1 1),),成员对象,成员对象名名m m(成员对象参数名表(成员对象参数名表m m)/派生类派生类新新增或更新增或更新成成员的初始化;员的初始化;;注意:注意:(1 1)构造函数的声明中,冒号及冒号以后部分必须略去。)构造函数的声明中,冒号及冒号以后部分必须略去。(2 2)基类的构造函)基类的构造函数尽管未被继承,但会被派生类构造函数数尽管未被继承,但会被派生类构造函数所所调调用。用。这里的这里的基基类名仅指类名仅指直接基类,写直接基类,写了更底了更底层基类,编层基类,编译报错译报错。
3、(3 3)参数总)参数总表中参数需表中参数需有类型说明有类型说明,而各参数名表中参数则,而各参数名表中参数则无无。8.2 派生类的构造函数与析构函数所列成员对象名所列成员对象名均均为新增的为新增的;指指针型成员对象如何处理?针型成员对象如何处理?派派生类构造函生类构造函数执行过程:数执行过程:Step 1.Step 1.调调用基类构造函数,按它们在派生类定用基类构造函数,按它们在派生类定义义中的中的先先后,后,顺序调顺序调用用;Step 2.Step 2.调用成员对象的构造函数,按它们在类定调用成员对象的构造函数,按它们在类定义中声明的先义中声明的先后,顺序调用后,顺序调用;Step 3.St
4、ep 3.派派生类的构造函数体中的操作。生类的构造函数体中的操作。8.2 派生类的构造函数与析构函数注意:注意:(1 1)派)派生类构造函数中,只生类构造函数中,只要不打算调用基类无要不打算调用基类无参默参默认构造函认构造函数,都数,都要显式给出基类名和参数表要显式给出基类名和参数表。(2 2)若基)若基类没有定义构造函数,则派生类也类没有定义构造函数,则派生类也可不可不定义,全部采用系统给定的默认构造函数。定义,全部采用系统给定的默认构造函数。(3 3)若基)若基类定义了类定义了带形带形参表的构造函数时,派生参表的构造函数时,派生类就应当定义构造函数。类就应当定义构造函数。析析构函数:构函数
5、:1 1.功能:派生功能:派生类析构函数的功类析构函数的功能依然用于善后。能依然用于善后。(1 1)只需在函数体内把派生类新增的一般成员处理只需在函数体内把派生类新增的一般成员处理好;好;(2 2)新增成新增成员对象和基类的善员对象和基类的善后,由系统调后,由系统调用成员用成员对象和基类的析构函数来完成对象和基类的析构函数来完成。2.2.执行:析执行:析构函数各部分执行次序与构造函数相构函数各部分执行次序与构造函数相反反Step1.Step1.对对派生类新增一般成派生类新增一般成员员善善后;后;Step2.Step2.对对新新增成员对象析构增成员对象析构;Step3.Step3.对对基基类对象
6、析类对象析构构。8.2 派生类的构造函数与析构函数【H6_6】子女随父姓基基类类class fatherprotected:string surname;/姓姓string firstname;/名名int age;public:father(string&surn,string&firn,int a)coutfather构造函数调用构造函数调用endl;surname=surn;firstname=firn;age=a;【H6_6】子女随父姓基基类类father()coutfather默认构造函数调用默认构造函数调用endl;surname=;firstname=;father()coutf
7、ather析构函数调用析构函数调用endl;string&getsurname()return surname;/取得姓取得姓void show()coutsurnamefirstname 年龄年龄:age;【H6_6】子女随父姓 公有派生子女类公有派生子女类class child:public fatherprivate:father myfather;/成员对象成员对象public:child(father&fa,string&na,int a):father(),myfather(fa)coutchild构造函数调用构造函数调用endl;surname=myfather.getsurna
8、me();firstname=na;age=a;借助对象(外部)间接访问借助对象(外部)间接访问保护数据。保护数据。可否内部直接访问基类的保可否内部直接访问基类的保护数据?怎么做?护数据?怎么做?【H6_6】子女随父姓 公有派生子女类公有派生子女类 child()coutchild析构函数调用析构函数调用endl;void show()cout姓名姓名:;coutsurnamefirstname 年龄年龄:age;coutendl;cout父亲父亲:;myfather.show();coutendl;【H6_6】子女随父姓 测试测试int main()string fasurn1(欧阳欧阳),
9、fafirn1(东海东海);string chfirn1(智超智超);father fa1(fasurn1,fafirn1,50);child ch1(fa1,chfirn1,23);cout子女信息结果子女信息结果:endl;ch1.show();return 0;【H6_6】子女随父姓 测试结果测试结果father构造函数调用构造函数调用 father默认构造函数调用默认构造函数调用 child构造函数调用构造函数调用 子女信息结果子女信息结果:姓名姓名:欧阳智超欧阳智超 年龄年龄:23父亲父亲:欧阳东海欧阳东海 年龄年龄:50child析构函数调用析构函数调用 father析构函数调用析
10、构函数调用father析构函数调用析构函数调用 father析构函数调用析构函数调用 建立建立fa1派生类调用基类默认构造函数派生类调用基类默认构造函数成员对象成员对象myfather构造,调用构造,调用了系统默了系统默认的复制构造函认的复制构造函数,未有显示数,未有显示派生类构造函数体,派生类构造函数体,建立建立ch1析构派析构派生类对象生类对象ch1析析构构myfather成员对象成员对象调用基类的析构函数调用基类的析构函数析构析构fa18.2 派生类的构造函数与析构函数 注注意:意:(1 1)例中)例中stringstring类字类字符符串用作串用作fatherfather类的成类的成员
11、对员对象象(聚(聚合)合),stringstring类字符串封装了字符数组的动类字符串封装了字符数组的动态内态内存分存分配和释放、深复制,使用安全、方便。而采用配和释放、深复制,使用安全、方便。而采用动态建立动态建立C C风格字符风格字符串,则要自己解决深串,则要自己解决深复复制问题。制问题。(2 2)提)提倡完善的类对象封装,不仅封装数据和对数倡完善的类对象封装,不仅封装数据和对数据的操作,据的操作,而且封装资源的动态分配与释放而且封装资源的动态分配与释放,形成,形成一个完备的子系一个完备的子系统,如统,如stringstring类类字字符符串。串。(3 3)聚合是)聚合是一种完善的封一种完
12、善的封装,因为借助成员对象将装,因为借助成员对象将资源的动态分配与释资源的动态分配与释放封装其内,放封装其内,大大大简大简化了层次化了层次化的类派生体化的类派生体系中资源的动态分配与释系中资源的动态分配与释放的操作,放的操作,不必再考虑复杂的多层深不必再考虑复杂的多层深复制复制。在册人员在册人员学生学生(单继承单继承)教职工教职工(单继承单继承)兼职教师兼职教师(单继承单继承)教师教师(单继承单继承)行政人员行政人员(单继承单继承)工人工人(单继承单继承)研究生研究生(单继承单继承)行行政政人人员员兼兼教教师师(多重继承多重继承)在职研究生在职研究生(多重继承多重继承)研究生助教研究生助教(多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7单元 面向对象编程-继承与多态-2 单元 面向 对象 编程 继承
限制150内