- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C邹金安第6章继承
第六章 继承 Chapter 6 Inheritance 学习目标 1、理解继承的机制,能利用继承建立新类,进一步认识软件的重用性; 2、理解多继承的工作原理,了解多继承要解决的问题; 3、认识虚拟继承的实质,把握多继承的方法; 4、能够简单地从多个基类中派生出新类。 第6章 继承 Chapter 6 Inheritance 教学内容: 1、继承与派生的概念 2、派生类 3、继承层次中对象间的赋值 4、继承方式 5、继承与组合 6、多继承 6.1继承与派生的概念 什么是继承? 定义类B时,自动得到类A的操作和数据属性,使得程序员只需定义类A中所没有的新成分就可完成在类B的定义,这样我们称类B继承了类A,类A派生了类B,A是基类(父类),B是派生类(子类)。这种机制称为继承。 6.2 派生类(1) (1)派生类对象结构 基类对象 子类对象 子类对象空间总是不小于基类对象 对于下面的继承关系: class Father{ int a,b; public: // 成员函数 }; class Son:public Father{ int c; public: // 成员函数 }; 6.2 派生类(2) (2)程序示例: #include iostream.h class demo { protected: int j; public: demo(){j=0;}; void add(int i){j+=i;} void display() { cout“Current value of j is”jendl;} }; class child:public demo//类child继承了demo类 { char ch; public: void sub(int i){j-=i;} }; void main(void) { child object,obj; // 两个对象的j均为0 object.display(); object.add(10); object.display(); object.sub(5); object.display(); //object的j=5 obj.display(); //obj的j=0 } 6.2 派生类(3) 3、派生类的构造 如果派生类和基类都有构造函数,在定义一派生类对象时,系统首先调用基类的构造函数,然后再调用派生类的构造函数。 在继承关系下有多个基类时,基类构造函数的调用顺序取决于定义派生类时基类的定义顺序。 析构函数的调用顺序与构造函数调用顺序恰恰相反。 调用拷贝构造函数与构造函数顺序一致。 6.2 派生类(4) 4、继承中的覆盖(overlap) 子类定义了与祖先类(父类,或者父类的父类...)名字相同的成员.子类对象访问成员函数,则首先匹配子类,然后父类,再父类的父类,依此类推.class Student{public: void display(); // ...};class GraStudent:public Student{public: void display(); //overlap // ...};void fn(){ GraStudent gs; gs.display(); //call GraStudent::display()} 6.3 继承层次中对象间的赋值 1、派生类对象可以赋值给基类对象,反之不可; 2、派生类指针值可以赋值给基类指针,反之不可; 3、派生类指针不可以指向基类对象,而基类指针可以指向派生类对象。 例如:Student s; //假设Student类继承了Person类 Person p=s; s=p; // error! Person t=s; Student r=p; // error! Person* p1=s; Student* s1=p; // error! 6.4 继承方式 (1) (1)继承的种类 继承可以公有继承,保护继承和私有继承. 公
文档评论(0)