网站大量收购闲置独家精品文档,联系QQ:2885784924

面向对象编程继承与多态.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unit 7—第八章 继承与多态 8.1 继承与派生的概念 8.4 虚基类 (选读) 8.3 多重继承与派生类成员标识(选读) 8.6 多态性与虚函数 8.5 派生类应用讨论 8.2 派生类的构造函数与析构函数 派生类构造函数的定义: 派生类名::派生类名(参数总表):基类名1(参数名表1)《,基类名2(参数名表2),……,基类名n(参数名表n)》,《成员对象名1(成员对象参数名表1),……,成员对象名m(成员对象参数名表m)》 { …… //派生类新增或更新成员的初始化; }; 注意: (1)构造函数的声明中,冒号及冒号以后部分必须略去。 (2)基类的构造函数尽管未被继承,但会被派生类构造函数所调用。这里的基类名仅指直接基类,写了更底层基类,编译报错。 (3)参数总表中参数需有类型说明,而各参数名表中参数则无。 8.2 派生类的构造函数与析构函数 所列成员对象名均为新增的; 指针型成员对象如何处理? 派生类构造函数执行过程: Step 1. 调用基类构造函数,按它们在派生类定义中的先后,顺序调用; Step 2.调用成员对象的构造函数,按它们在类定义中声明的先后,顺序调用; Step 3. 派生类的构造函数体中的操作。 8.2 派生类的构造函数与析构函数 注意: (1)派生类构造函数中,只要不打算调用基类无参默认构造函数,都要显式给出基类名和参数表。 (2)若基类没有定义构造函数,则派生类也可不定义,全部采用系统给定的默认构造函数。 (3)若基类定义了带形参表的构造函数时,派生类就应当定义构造函数。 析构函数: 1.功能:派生类析构函数的功能依然用于善后。 (1)只需在函数体内把派生类新增的一般成员处理好; (2)新增成员对象和基类的善后,由系统调用成员对象和基类的析构函数来完成。 2. 执行:析构函数各部分执行次序与构造函数相反 Step1. 对派生类新增一般成员善后; Step2. 对新增成员对象析构; Step3. 对基类对象析构。 8.2 派生类的构造函数与析构函数 【H6_6】子女随父姓 基类 class father{ protected: 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(){coutfather析构函数调用endl; } string getsurname(){return surname;}//取得姓 void show(){coutsurnamefirstname 年龄:age;} }; 【H6_6】子女随父姓 公有派生子女类 class child:public father{ private: father myfather;//成员对象 public: child(father fa,string na,int a):father(), myfather(fa){ coutchild构造函数调用endl; surname=myfather.getsurname(); firstname=na; age=a; } 借助对象(外部)间接访问保护数据。 可否内部直接访问基类的保护数据?怎么做? 【H6_6】子女随父姓 公有派生子女类 ~child(){ coutchild析构函数调用endl;} void show(){ cout姓名:; coutsurname firstname 年龄:age; coutendl; cout父亲:; myfather.show(); coutendl; } }; 【H6_6】子女随父姓 测试 int main(){ string fasurn1(欧阳),fafirn1(东海); string chfirn1(智超); father fa1(fasurn1,fafirn1,50); child ch1(fa1,chfirn1,23); cout子女信息结果:endl; ch1.show(); return 0; } 【H6_6】子女随父姓 测试结果 father构造函数调用 father默认构

文档评论(0)

gpcjc1996 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档