第3章C++第1、2、3章课件(李琳).ppt

第3章C++第1、2、3章课件(李琳).ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
继承方式控制着派生类成员以及派生类对象如何访问从基类继承来的成员。 在派生类的定义语句中,每一个“继承方式”只能限制紧随其后的一个基类。 继承方式可以用3种关键字描述:public、private和protected,分别表示公有继承、私有继承和保护继承。 void Bed::Sleep( void ) const{ cout<<"开始睡觉。"<<endl;} void Sofa::WatchTV( void ) const{cout<<"正在看电视。"<<endl;} void SofaBed::FoldOut( void){ cout<<"可以折叠和打开。"<<endl;} ? int main( ){ SofaBed sb( 50.5 ); sb.SetWeight( 51.9 ); sb.WatchTV( ); sb.FoldOut( ); sb.Sleep( ); return 0; } 程序执行结果如下: 此家具重51.9千克 正在看电视。 可以折叠和打开。 开始睡觉。 3.5.2 虚基类的初始化 虚基类的初始化在语法上和一般基类一样,只是调用顺序略有不同,它遵循以下顺序: (1)虚基类的构造函数在非虚基类之前调用; (2)若同一层次中包含多个虚基类,则按它们的声明顺序调用; (3)若虚基类由非虚基类派生而来,要先调用更高级别基类的构造函数,再遵循上述(1)和(2)的顺序。 例如: class A; class B; class C : public A, virtual B; 将产生如下的调用次序: B( ) A( ) C( ) 例3.10 虚基类初始化举例。 Base1 Base2 Level1 Level2 Leaf class Base1{ public: Base1( void ) { cout <<"class Base1"<<endl;} };? class Base2{ public: Base2( void ) { cout <<"class Base2"<<endl;} };? class Level1 : public Base2, virtual public Base1 {// 定义派生类Level1,指定Base1为虚基类 public: Level1 ( void ){ cout <<"class Level1"<<endl; } };? class Level2 : public Base2, virtual public Base1{ //同上 public: Level2 ( void ) {cout << "class Level2" <<endl;} };? class Leaf : public Level1, virtual public Level2{ //同上 public: Leaf ( void ){ cout << "class Leaf" <<endl; } };? int main( void ){ Leaf obj; // 创建一个派生类Leaf的对象 return 0; } 程序执行结果如下: class Base1 class Base2 class Level2 class Base2 class Level1 class Leaf 3.6 组 合 类 3.6.1 组合类的概念 所谓类的组合,就是指在一个类的数据成员中含有一个或多个类对象,拥有这样结构的类就叫组合类,这种以数据成员身份出现的类对象就叫子对象。组合类创建的对象和子对象之间是一种“整体与部件”的关系,也是一种“拥有(has a)”关系。 考虑轿车和发动机的关系: “has a”的关系——即轿车拥有发动机这个零件。 考虑Person和birthday的关系: “ has a”的关系——Person类拥有birthday 组合类 子对象 子对象的访问权限 3.6.2 组合类中的构造函数 组合类对象在创建时,作为其组成部件的子对象将首先被系统创建。 为此,组合类的构造函数不仅要提供对本类对象的初始化,还要提供对子对象的初始化。 如果一个组合类同时又是一个派生类,那么它的构造函数初始化列表还应负责对基类对象的初始化。 一个类既是组合类又是派生类时的构造函数定义形式: 类名::类名(形参表):基类1(形参表1),……, 基类n(形参表n), 子对象1(形参表1),……,子对象n(形参表n) {本类新增数据成员的初始化;} 规定: 最先调用基类的构造函数;然后调用子对象所在类的构造函数;最后调用本类的构造函数。 初始化列表中的参数也以此顺序来逐一提供。 例3.11 设计一个组合类People,包括人员的编号和性别 ,出

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档