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

(C++语言程序的设计)第19讲 继承2.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(C++语言程序的设计)第19讲 继承2.ppt

2018-5-24 1 HZAU信息学院计算机系 C++语言程序设计 第19讲 继承2 2 多重继承 前面所介绍的继承都只是单继承 包括多层派生──派生类的派生类。 客观事物有时是“一体多能”、“一身兼任数职”的。这意味着派生类从多个基类继承而来。 在职攻读研究生学位的教师(既是教师又是研究生); 优秀学生兼任学生辅导员(既是学生又兼任教师工作); 专业技术人员兼任管理工作(既是员工又是管理者); 打印复印一体机(既是打印机,又是复印机,还可能是电话机、传真机和扫描仪); 手机(是电话机、MP3播放器、MP4播放器、照相机、电视机、收音机、录音机、U盘、闹钟和游戏机等)。 3 多重继承 按继承的设计模式,对于这种“一身兼任数职”的事物应该有多个基类──这就是需要多重继承的原因。 下面简要说明 多重继承的语法; 多重继承所带来的新问题(成员冲突和冗余); 如何解决新问题。 语法格式 class 派生类名 : 继承方式 基类1,继承方式 基类2,… { // 派生类新增加的属性和行为,重载或覆盖基类的成员函数 }; 4 多继承时的构造函数 派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数) { 本类成员初始化赋值语句; }; 5 构造函数的调用顺序 1.调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 2.派生类的构造函数体中的内容。 8 class C: public B2, public B1, public B3 { public: //派生类的公有成员 C(int a, int b): B1(a), B2(b) { coutconstructing Cendl;} }; int main() { C obj(1,2); return 0; } 运行结果: constructing B2 2 constructing B1 1 constructing B3 * constructing C 8 9 继承时的析构函数 析构函数也不被继承,派生类自行声明 声明方法与一般(无继承关系时)类的析构函数相同。 不需要显式地调用基类的析构函数,系统会自动隐式调用。 析构函数的调用次序与构造函数相反。 10 例19-2 派生类析构函数举例 #include iostream using namespace std; class B1 //基类B1声明 { public: B1(int i) {coutconstructing B1 iendl;} ~B1() {coutdestructing B1 endl;} }; class B2 //基类B2声明 {public: B2(int j) {coutconstructing B2 jendl;} ~B2() {coutdestructing B2 endl;} }; class B3 //基类B3声明 {public: B3(){coutconstructing B3 *endl;} ~B3() {coutdestructing B3 endl;} }; 11 class C: public B2, public B1, public B3 {public: C(int a, int b): B1(a), B2(b) {coutconstructing Cendl;} ~C() {coutdestructing C endl;} }; int main() { C obj(1,2); return 0; } 11 12 例19-2 运行结果 constructing B2 2 constructing B1 1 constructing B3 * constructing C destructing C destructing B3 destructing B1 destructing B2 13 同名隐藏规则 当派生类与基类中有相同成员时: 若未强行指名,则通过派生类对象使用的是派生类中的同名成员。 如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。 14 例19-3 多继承同名隐藏举例 #include iostream using namespace std; class B1 //声明基类B1 { public: //外部接口 int nV; void fun() {coutMember of B1endl;} }; class B2 //声明基类B2 { public: //外部接口 int nV; void fun(){coutMember of B

文档评论(0)

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

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

1亿VIP精品文档

相关文档