欢迎来到天天文库
浏览记录
ID:22360050
大小:213.50 KB
页数:43页
时间:2018-10-20
《派生类与继承》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章派生类与继承5.1继承(Inheritance)的概念:一个类的数据成员和成员函数,有些是类本身自己定义的,有一些是可继承的或通过模板生成的。所谓继承就是利用已有的数据类型定义出新的数据类型。该机制自动地为一个类提供来自另一个类的操作和数据结构,程序员只需在新类中定义已有类中没有的成分来建立新类。利用类的“继承”,就可以将使原来的程序代码重用,从而减少了程序代码的冗余度,符合软件重用的目标。所以说,继承是面向对象程序设计的一个重要机制。另外,在C++中扩充派生类成员的方法是非常灵活的。本章
2、重点与难点:继承的概念和不同形式的派生继承对成员访问属性的影响.多重继承的虚基类概念.classperson{protected:charname[10];intage;charsex;public:voidprint();};classemployee{protected:charname[10];intage;charsex;chardepartment[20];floatsalary;public:voidprint();};派生类不仅可以继承原来类的成员,还可以通过以下方式产生新的成员:
3、(1)增加新的数据成员;(2)增加新的成员函数;(3)重新定义已有成员函数;(5)改变现有成员的属性。在继承关系中,称被继承的类为基类(baseclass)(或父类),而把通过继承关系定义出来的新类称为派生类(derivedclass)(子类)。由此可见,派生类既可以对基类的性质进行扩展,又可以进行限制,从而得到更加灵活、更加适用的可重用模块,大大缩短软件的开发时间。5.2继承的工作方式:它是从一个基类(父类)派生的继承1.派生类的声明形式为:class派生类名:继承方式基类名{派生类中的新成员
4、}其中:(1)派生类名由用户自己命名;(2)继承方式也称访问方式,可以为public、protected和private,默认为private方式。继承方式为public方式时,这种继承称为公有继承;继承方式为protected方式时,称为保护继承;private方式时,称为私有继承;(3)基类名必须是程序中一个已有的类。ACB父类子类注:(1)单继承(4)在冒号“:”后的部分告诉系统,这个派生类是从哪个基类派生的,以及在派生时的继承方式。(5)大括号内的部分是派生类中新定义的成员。例如://已
5、定义一个基类classperson{private:charname[10];intage;charsex;public://….};//定义一个派生类classemployer:publicperson{private:chardepartment[20];floatsalary;public://….};2.基类成员在派生类中的访问属性(1)派生类不仅拥有属于自己的数据成员与成员函数,还有从基类继承来的数据成员与成员函数;同时派生类可对一些继承来的函数重新定义,以适应新的要求。(2)C++关
6、于类的继承方式的规定,如下表5.1所示:①按private方式继承(即私有继承)时,基类中的公有成员和保护成员在派生类中皆变为私有成员。②按public方式继承(即公有继承)时,基类中的公有成员和保护成员在派生类中不变。不管按什么方式继承,基类中的私有成员均不能被派生类访问.基类公有派生类私有派生类保护派生类public成员public成员private成员protected成员protected成员protected成员private成员protected成员private成员无法访问无法访问
7、无法访问3.基类成员在派生类中的访问规则派生类对基类成员的访问形式主要有以下两种:(1)内部访问:由派生类中新增成员对基类继承来的成员的访问.(2)对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.①按private方式继承(即私有继承)时,基类中的公有成员和保护成员在派生类中皆变为私有成员。派生类的其他成员可以直接访问它们,但在类外部通过派生类的对象无法访问.ex5_1ex5_2因此,基类成员在私有继承时,只能内部访问原来的公有成员和保护成员②按public方式继承(即公有继
8、承)时,基类中的公有成员和保护成员在派生类中访问属性不变。但类的外部使用者只能通过派生类的对象访问继承来的公有成员.ex5_3③保护继承的访问规则由于基类的公有成员和保护成员都成为派生类的保护成员,因此派生类的其它成员都可以直接访问它们,但类的外部使用者不能通过派生类的对象来访问它们.ex5_4/ex5_1私有继承#includeclassbase{intx;public:voidsetx(intn){x=n;}intshowx(){returnx;}};classder
此文档下载收益归作者所有