- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章继承和派生 4.1继承和派生的概念 //Column.cpp #include Column.h #include iostream using namespace std; void Column::Show() { Circle::Show(); cout高为:hendl; } float Column::GetArea() { return 2*Circle::GetArea()+GetLength()*h; } float Column::GetVolume() { return Circle::GetArea()*h; } 在多层派生的情况下:派生类的构造函数初始化列表中只须写出其上一层派生类的构造函数,不要再写上其间接子类的构造函数。 4.5.4 派生类的析构函数 在派生时,派生类是不能继承基类的析构函数的,也需要通过派生类的析构函数去调用基类的析构函数。在派生类中可以根据需要定义自己的析构函数,用来对派生类中所增加的成员进行清理工作。基类的清理工作仍然由基类的析构函数负责。在执行派生类的析构函数时,系统会自动调用基类的析构 函数和子对象的析构函数,对基类和子对象进行清理。 调用的顺序与构造函数正好相反: 先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。 4.6 多重继承 前面讨论的是单继承,即一个类是从一个基类派生而来的。实际上,常常有这样的情况: 一个派生类有两个或多个基类,派生类从两个或多个基类中继承所需的属性。C++为了适应这种情况,允许一个派生类同时继承多个基类。这种行为称为多重继承(multiple inheritance)。 4.6.1 声明多重继承的方式 声多重继承子类的方法和单继承相似,只是在标明子类的位置将继承的父类都写上,且以豆号隔开。 例如类D多重继承了类A,B,C则申明类D的方法如下: class D:public A,protected B,private C { 类D新增加的成员 } 多重继承的子类具有多个父类,子类中具有所有父类的所有成员。且对多个父类可以有不同的继承方式,不同的继承方式决定了继承而来的父类的成员在子类中的访问属性的不同。 4.6.2 多重继承的派生类的构造函数 多重继承派生类的构造函数形式与单继承时的构造函数形式基本相同,只是在初始列表中包含多个基类构造函数。形式如下: 派生类构造函数名(总参数表列): 基类1构造函数(参数表列), 基类2构造函数(参数表列), 基类3构造函数 (参数表列) {派生类中新增数据成员成员初始化语句} 派生类构造函数的执行顺序同样为: 先调用基类的构造函数,再执行派生类构造函数的函数体。调用基类构造函数的顺序是按照声明派生类时基类出现的顺序,与构造函数初始化列表中基类的排列顺序无关。 #include iostream #include string using namespace std; class Teacher { public: Teacher(string nam,int a, string t) { name=nam; age=a; title=t;} void display( ) {coutname:nameendl; coutageageendl; couttitle:titleendl; } protected: string name; int age; string title; }; class Student { public: Student(string nam,char s,float sco) {name1=nam; sex=s; score=sco;} void display1( ) {coutname:name1endl; coutsex:sexendl; coutscore:scoreendl; } protected: string name1; char sex; float score;
文档评论(0)