- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章继承与派生.ppt
第七章 继承与派生 派生类的生成过程 公有继承(public) 私有继承(private) 保护继承(protected) 7.1 继承与派生的实例 继承与派生问题举例 继承与派生问题举例 继承与派生问题举例 继承与派生 继承:新类(子类)从已有类(基类)那里得到已有的特性。 派生:从已有类产生新类的过程 原有的类称为基类或父类,产生的新类派生类或子类 派生类例 class Employee { protected: char *name; int individualEmpNo; int grade; float accumPay; static int emplyeeNo; public: Employee(); ~Employee(); void pay(); void promote(); void displayStatus(); }; 7.2 访问控制 7.3 派生类的构造和析构函数 派生类的构造函数 基类的构造函数不会继承到派生类中 在派生类构造函数的初始化列表中,实现基类的初始化 派生类构造函数的一般语法为: 派生类名::派生类名(参数表):基类名1(参数表1),基类名2(参数表2),...,基类名n(参数表n) 派生类的构造函数 派生类构造函数所做的工作如下:(按先后顺序) 按照基类的声明顺序分别调用各个基类的构造函数 如果派生类有内嵌对象,则按照它们在类中声明的顺序分别调用内嵌对象的构造函数 执行派生类构造函数体中的内容 主要功能:初始化基类及派生类的成员 如果基类没有定义构造函数或定义了无参数的构造函数,那么在派生类中,无需对此基类进行初始化 程序例1 #include iostream.h class B1 { public: B1(int i) {coutConstructing B1 iendl;} }; class B2 { public: B2(int j) {coutConstructing B2 jendl;} }; 程序例2 #include iostream.h class B1 { public: B1(int i) { coutConstructing B1 “ iendl;} }; class B2 { public: B2(int j) {coutConstructing B2 “ jendl;} }; 程序例2执行结果 Constructing B2 2 先执行基类的构造函数 Constructing B1 1 Constructing B1 2 再执行内嵌对象的构造函数 Constructing B2 1 Constructing C 3 再执行派生类构造函数本身 派生类的析构函数 基类的析构函数不能继承到派生类中 对象销毁时,系统会自动销毁派生类的内嵌对象和基类 对象销毁时,各个析构函数的执行顺序与构造函数中相反: 执行派生类本身的析构函数 如果有内嵌对象的话,执行内嵌对象的析构函数 执行基类的析构函数 程序例3(1) #include iostream.h class B1 { public: B1(int i) { this-i=i; coutConstructing B1 iendl; } ~B1() { coutDeconstructing B1 iendl; } private: int i; }; 程序例3(2) class B2 { public: B2(int j) { this-j=j; coutConstructing B2 jendl; } ~B2() { coutDeconstructing B2 jendl; } private: int j; }; 程序例3(3) class C:public B2,public B1 { public: C(int a,int b,int c):B1(a),B2(b),memberb2(a),memberb1(b) { this-c=c; coutConstructing C cendl; } ~C() { coutDeconstructing C cendl; } private: B1 memberb1; B2 memberb2; int c; }; 程序例3的执行结果 Constructing B2 2 先执行基类的构造函数 Constructing B1 1 Constructing B1 2 再执行内嵌对象的构造函数 Constructing B2 1 Constructing C 3 再执行派生类构造函数本身 Deconstructing C 3 Decon
文档评论(0)