欢迎来到天天文库
浏览记录
ID:50081996
大小:478.50 KB
页数:29页
时间:2020-03-08
《C++程序设计 教学课件 作者 任化敏 chapter11-类的派生与继承.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计第二部分:面向对象编程第十一章类的派生与继承第十一章类的派生与继承概述类的继承与派生继承方式与访问控制基类与派生类的构造函数和析构函数基类与派生类的关系多继承虚基类11.1概述类的继承(Inheritance)机制通过继承,一个新类将在原有的、已定义类的基础上派生出来,它继承原有类的属性和行为,可以扩充新的属性和行为,也可以对原有类中的成员进行更新由于新类是在原有类基础上产生的,定义新类时可以利用原有类的代码,从而降低软件开发成本,实现软件的重用图11-1类的继承关系图11.2类的继承与派生继承就是在一个已存在的类的基
2、础上建立一个新的类,已存在的类称作“基类”,或者“父类”,新建立的类称作“派生类”或者“子类”。派生类继承了基类的所有数据成员和成员函数,并可以对成员做必要的增加或调整单继承多继承11.2.1定义基类基类任何用作定义其他类的基础的类例如,我们直接根据类A定义类B,类A就称作是类B的直接基类。如果根据类B再定义类C的话,类B就是类C的直接基类,类A称作类C的间接基类。基类Student定义示例classStudent{public://公有数据成员stringstuId;//学生编号stringname;//名字intage;//年龄p
3、rivate://私有数据成员vectorcourses;//课程public://公有成员函数Student(stringstuId,stringname,intage);//构造函数~Student(void);//析构函数voidsetCourses(vectorcourses);//选课vectorgetCourses();//读取选课列表voidsetName(stringname){this->name=name;}//设置学生的姓名stringgetName(){
4、returnname;};//返回学生姓名voidsetId(stringstuId){this->stuId=stuId;}//设置学生学号stringgetId(){returnstuId;}//返回学生学号voidsetAge(intage){this->age=age;}//设置学生年龄intgetAge(){returnage;}//返回学生年龄};11.2.2定义派生类声明派生类的一般形式派生类继承基类成员的数据成员,不继承基类的构造函数、析构函数以及任何重载赋值运算符的成员函数class派生类名:[继承方式]基类名{派生
5、类自己的成员};派生类的主要工作接收并修改基类的成员增加新的成员派生类的成员继承关系建议:不要随意地从已有类中找一个类作为基类去构造派生类,应当考虑怎么样能够使派生类具有更合理的结构。11.3继承方式与访问控制公有派生:访问控制为public私有派生:访问控制为private保护派生:访问控制为protected派生时指定不同的访问权限,直接影响到基类中的成员在派生类中的访问权限11.3.1公有派生基类的公有成员在派生类中仍为公有成员基类的私有成员在派生类中仍为私有成员派生类不能直接使用基类中的私有成员,只能通过该基类公有的或保护的成
6、员函数间接使用基类中的私有成员基类的保护成员在派生类中仍为保护成员在派生类中可直接使用它们,但在派生类外,不可直接访问这些成员,必须通过派生类的公有成员函数或基类的公有成员函数才能访问11.3.2私有派生基类的公有成员在派生类中为私有成员派生类中仍可直接访问这些成员,在派生类之外必须通过派生类中的公有成员函数来间接访问。基类的私有成员在派生类中仍为私有成员派生类中不能直接访问基类中的私有成员,只能通过该基类公有的或保护的成员函数间接使用基类中的私有成员基类的保护成员在派生类中仍为保护成员11.3.3保护派生基类的公有成员和保护成员在派
7、生类中都成为保护成员,基类的私有成员不能被派生类直接访问,这意味着派生类如果需要访问基类的私有成员,必须通过基类的公有成员访问该私有成员。继承方式基类中的成员属性基类成员在派生类中的访问权限公有公有公有公有私有不可访问公有保护保护私有公有私有私有私有不可访问私有保护私有保护公有保护保护私有不可访问保护保护保护表11-1共有和私有派生的访问权限11.4基类与派生类的构造函数和析构函数11.4.1派生类的构造函数简单的派生类构造函数派生类类名::派生类类名(参数):基类1(参数),…,基类n(参数){//派生类新增成员的初始化}说明:当说
8、明派生类对象时,系统先调用各基类的构造函数,然后执行派生类的构造函数。若某个基类仍是派生类,则这种调用基类构造函数的过程递归进行下去。当撤销派生类的对象时,析构函数的调用顺序正好与构造函数的顺序相反。默认构造函数派生类也
此文档下载收益归作者所有