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

C++语言程序设计-继承与派生.ppt

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

* * * * * * * * * * * * * * * * * * * * * * 目的: 类继承,组合 4第四讲——继承与派生 p64 * * * 目的: 类继承,组合 4第四讲——继承与派生 p64 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * void main() { a a1; a1.func(); //in a cout-----------------------------------------endl; b b1; b1.func(); //in b b1.a::func(); //in a cout-----------------------------------------endl; c c1; c1.func(); //in c c1.a::func(); //in a cout-----------------------------------------endl; d d1; d1.func(); //in d d1.b::func(); //in b d1.c::func(); //in c d1.a::func(); //in a } 调整指针有几个?内存布局啥样? #includeiostream.h class B0 { char e; }; class B1 : virtual public B0 { char b1; }; class B2 : virtual public B0 { char b2; }; class D:public B1,public B2 { char d; }; void main() { B0 bb; B1 bb1; B2 bb2; D dd; coutsizeof(bb) sizeof(bb1) sizeof(bb2) sizeof(dd)endl; } 1 9 9 21 这仅是VC 的结果,gcc是另外的样子: 1 8 8 16 对象内存布局图示: dd e b1 B0 B1 B2 1Byte D bb2 e b2 e bb 1 4 4 b2 d 8 8 4 1 = 9 = 21 类的组合 has - a 类的继承 is - a 类的聚集 hold - a 友元类 use - a 局部类 internal - a 内嵌类 embed - a 类模板 template * 类间关系小结: 7种 类的组合是“整体与部件”的关系; 类的继承是“一般与特殊”的关系; 类模板是“抽象与具体”的关系; 类的聚集是“主宰与受控”的关系; 类的友元是“主权与间谍”的关系; 内部和内嵌则是“自己拥有”。 * 从语义上分辨类的关系: Thanks! * * * * * * * * * * * * * * * * * * * * * * * * * * 类型兼容的例子: class Base { int m_a , m_b ; }; class Derived : public Base { int m_c ; }; void main( void ) { Derived objD1; Base objB1= objD1; //发生类型转换(切割) Derived *pD1 = objD1; Base *pB1 = pD1; //发生类型转换(切割) Base robjB1 =objD1; } * * m _a m _b m _c Derived objD1 m _b m _a Base objB1 对象初始化。真切割 m _a m _b m _c Derived objD1 Derived * pD1 Base * pB1 指针初始化假切割 Base robjB1 m _a m _b m _c Derived objD1 引用初始化。假切割 类型兼容的结论 类型兼容前提下的三种初始化或赋值操作中,真正发生“对象切割”的,只有子类对象赋值给父类对象时。 而使用指针或引用,只是逻辑上发生了“切割”,实际上并没有发生,于是才会有后面的“通过强制类型转换,可将静态父类类型回归其动态子类类型

文档评论(0)

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

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

1亿VIP精品文档

相关文档