vc04 继承和派生.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vc04 继承和派生

《面向对象程序设计与Visual C++6.0教程》 《面向对象程序设计与Visual C++6.0教程》 第4章 继承与派生 本章主要内容: ●继承与派生的概念 ● 基类与派生类 ●访问权限控制 ●派生类的构造函数、析构函数 ●构造函数与析构函数 ●多继承及虚基类 ●赋值兼容规则 4.1 继承与派生的概念 ●继承是自然界的一个普遍的重要特性 。 ●派生使新类在继承共性的同时,具有了更加丰富多彩的个性 。 1. 继承的层次结构 ●面向对象程序设计的继承与派生机制是源于自然界中的概念。 ●一般采用层次分类方法来描述事物之间的关系。 飞行器类的层次结构关系图 2. 为什么要使用继承 ●由基类派生出新类的过程称为派生,派生类自身也可以作为基类派生出新的派生类。继承是指派生类自动拥有基类的属性和行为特征。 ●派生类自动拥有基类的属性和行为,并表现出自身新的属性和行为特征。 ●类的继承和派生机制使程序员无须修改已有的类,只需在既有类的基础上,根据问题的实际需要,通过增加部分代码或修改少量代码而得到新的类(派生类),从而很好的解决了程序代码的重用问题。 2. 为什么要使用继承 class Person class Student { { protected: protected: char name[20]; char name[20]; int age; int age; char sex; char sex; char id; char id; public: char department[30]; void print(); float score; } public: void print(); } 讲到此 4.4赋值兼容规则 规则1:可以用派生类对象为基类对象赋值; 规则2:可以用派生类对象初始化基类引用对象; 规则3:可以把指向派生类对象的指针赋给基类对象的指针; 规则4:可以把派生类对象的地址赋给基类对象的指针。 设计举例-图书馆信息(公有继承) 设计要求: 图书、杂志借阅系统 设计分析 赋值兼容规则例子 class A { protected: int a1; float a2; Public: A(int x1 = 0, float x2 = 0): a1(x1), a2(x2){} A(A a): a1(a.a1), a2(a.a2){} ~A(void){} int GetA1(void)const {return a1;} float GetA2(void)const {return a2;} }; 程序中4个类的关系用DAG图示法表示如下: A(a) B1(b1) A(a) B2(b2) C(f(),c) 从图中看出,类A 是派生类C 两条继承路径上的一个公共基类,因此这个公共基类会在派生类对象中产生两个基类子对象。如果要使这个公共基类在派生类中只产生一个基类子对象,则需要将这个基类设置为虚基类。 引进虚基类的目的是为了解决二义性问题,使用公共基类在其派生类对象中只产生一个基类子对象。 虚基类说明格式如下: virtual 继承方式基类名 §6.7 虚基类 例如: class A { public: void f(); private: int a; }; class B: virtual public A { protected: int b; }; class C: virtual public A { protected: int c; }; class D: public B, public C { public: int g(); private: int d; }; 例中,类A 是类D 的虚基类。类A,类B,类C 和类D 之间的关系用DAG图示如下: A(f(),a) B(b) C(c) D(g(),d) 从图中可见,虚基类子对象被合并成一个子对象,这种“合并”作用,使得可能出现的二义性被消除。 下面访问是正确的: D dobj;

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档