类的继承和派生精选文档.ppt
《类的继承和派生精选文档.ppt》由会员分享,可在线阅读,更多相关《类的继承和派生精选文档.ppt(111页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、类的继承和派生类的继承和派生本讲稿第一页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类class Personstring IdPerson;/身份证号身份证号,18位数字位数字string Name;/姓名姓名bool Sex;/性别性别int Birthday;/格式格式1986年年8月月18日写作日写作19860818string HomeAddress;/家庭地址家庭地址public:Person(string,string,Tsex,int,string);/构造函数构造函数 Person();/默认的构造函数默认的构造函数 Person()
2、;/析构函数析构函数本讲稿第二页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类 void SetName(string);/修改名字修改名字 string GetName()return Name;/提取名字提取名字 void SetSex(Tsex sex)Sex=sex;/修改性别修改性别 bool GetSex()return Sex;/提取性别提取性别 void SetId(string id)IdPerson=id;/修改身份证号修改身份证号 string GetId()return IdPerson;/提取身份证号提取身份证号 void S
3、etBirth(int birthday)Birthday=birthday;/修改生日修改生日 int GetBirth()return Birthday;/提取生日提取生日 void SetHomeAdd(string);/修改住址修改住址 string GetHomeAdd()return HomeAddress;/提取住址提取住址 void PrintInfo();/打印个人信息打印个人信息;/接口函数:接口函数:本讲稿第三页,共一百一十一页继承继承(inheritance)(inheritance):该机制是面向对象程序设计使代码可以复用的最重要的手段,该机制是面向对象程序设计使代码
4、可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。次结构。体现了由简单到复杂的认识过程体现了由简单到复杂的认识过程。第八章第八章 继承与多态继承与多态多态性多态性(polymorphism):(polymorphism):多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,属于编译时的
5、多数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚函数为基础的运行时的多态性是面向对象程序设计的标态性。以虚函数为基础的运行时的多态性是面向对象程序设计的标志性特征。志性特征。体现了类推和比喻的思想方法。体现了类推和比喻的思想方法。本讲稿第四页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类class Personstring IdPerson;/身份证号身份证号,18位数字位数字string Name;/姓名姓名bool Sex;/性别性别int Birthday;/格式格式1986年年8月月18日写作日写作19860818stri
6、ng HomeAddress;/家庭地址家庭地址public:Person(string,string,Tsex,int,string);/构造函数构造函数 Person();/默认的构造函数默认的构造函数 Person();/析构函数析构函数本讲稿第五页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类 void SetName(string);/修改名字修改名字 string GetName()return Name;/提取名字提取名字 void SetSex(Tsex sex)Sex=sex;/修改性别修改性别 Tsex GetSex()return
7、 Sex;/提取性别提取性别 void SetId(string id)IdPerson=id;/修改身份证号修改身份证号 string GetId()return IdPerson;/提取身份证号提取身份证号 void SetBirth(int birthday)Birthday=birthday;/修改生日修改生日 int GetBirth()return Birthday;/提取生日提取生日 void SetHomeAdd(string);/修改住址修改住址 string GetHomeAdd()return HomeAddress;/提取住址提取住址 virtual void Prin
8、tInfo();/打印个人信息打印个人信息;/接口函数:接口函数:本讲稿第六页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类派生的学生类派生的学生类:class Student:public Person/定义派生的学生类定义派生的学生类 string NoStudent;/学号学号 course cs30;/30门课程与成绩门课程与成绩public:Student(string id,string name,Tsex sex,int birthday,string homeadd,string nostud);/注意注意派生类构造函数派生类构造函数声
9、明方式声明方式 Student();/默认派生类构造函数默认派生类构造函数 Student();/派生类析构函数派生类析构函数 SetCourse(string,int);/课程设置课程设置 int GetCourse(string);/查找成绩查找成绩 void PrintInfo();/打印学生情况打印学生情况;struct course string coursename;int grade;本讲稿第七页,共一百一十一页第八章 继承与多态8.1继承与派生的概念继承与派生的概念 8.4虚基类虚基类(选读)(选读)8.3多重继承与派生类成员标识多重继承与派生类成员标识 8.6多态性与虚函数多
10、态性与虚函数 8.5派生类应用讨论派生类应用讨论 8.2派生类的构造函数与析构函数派生类的构造函数与析构函数 本讲稿第八页,共一百一十一页8.1 继承与派生的概念层次概念层次概念是计算机的重要概念。通过是计算机的重要概念。通过继承继承(inheritance)的机)的机制可对类(制可对类(class)分层,提供类型)分层,提供类型/子类型的关系。子类型的关系。C+通过通过类派生类派生(class derivation)的机制来支持继承。被继承)的机制来支持继承。被继承的类称为的类称为基类基类(base class)或)或超类超类(superclass),新的类为),新的类为派派生类生类(der
11、ived class)或)或子类子类(subclass)。)。基类和派生类的集合基类和派生类的集合称作称作类继承层次结构类继承层次结构(hierarchy)。)。如果基类和派生类共享相同的公有接口,则派生类被称作基类的子类如果基类和派生类共享相同的公有接口,则派生类被称作基类的子类型(型(subtype)。)。层次概念:层次概念:派生反映了事物之间的联系,事物的共性与个性之间的关系。派生反映了事物之间的联系,事物的共性与个性之间的关系。派生派生与独立设计若干相关的类,前者工作量少,重复的部分可以从基类与独立设计若干相关的类,前者工作量少,重复的部分可以从基类继承来,不需要单独继承来,不需要单独
12、编程编程。本讲稿第九页,共一百一十一页8.1 继承与派生的概念8.1.1类的派生与继承类的派生与继承 8.1.2公有派生与私有派生公有派生与私有派生 本讲稿第十页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类派生的学生类派生的学生类:class Student:public Person/定义派生的学生类定义派生的学生类 string NoStudent;/学号学号 course cs30;/30门课程与成绩门课程与成绩public:Student(string id,string name,Tsex sex,int birthday,string h
13、omeadd,string nostud);/注意派生类构造函数声明方式注意派生类构造函数声明方式 Student();/默认派生类构造函数默认派生类构造函数 Student();/派生类析构函数派生类析构函数 SetCourse(string,int);/课程设置课程设置 int GetCourse(string);/查找成绩查找成绩 void PrintInfo();/打印学生情况打印学生情况;struct course string coursename;int grade;本讲稿第十一页,共一百一十一页派生类的定义:派生类的定义:class 派生类名:访问限定符派生类名:访问限定符 基
14、类名基类名1,访问限定符,访问限定符 基类名基类名2,访问限定符,访问限定符 基类名基类名n private:成员表成员表1;/派生类增加或替代的私有成员派生类增加或替代的私有成员public:成员表成员表2;/派生类增加或替代的公有成员派生类增加或替代的公有成员protected:成员表成员表3;/派生类增加或替代的保护成员派生类增加或替代的保护成员;/分号不可少分号不可少其中基类其中基类1 1,基类,基类2 2,是已声明的类。是已声明的类。在派生类定义的类体中给出的在派生类定义的类体中给出的成员称为成员称为派生类成员派生类成员,它们是新增加成员,它们给派生类添加了不同,它们是新增加成员,它
15、们给派生类添加了不同于基类的新的属性和功能。派生类成员也包括取代基类成员的更新于基类的新的属性和功能。派生类成员也包括取代基类成员的更新成员。成员。8.1.1 8.1.1 类的派生与继承类的派生与继承本讲稿第十二页,共一百一十一页基类基类1基类基类2基类基类n派生类派生类1派生类派生类2基类基类派生类派生类1派生类派生类2(a)多重继承)多重继承 (b)单继承)单继承 图图8.1多重继承与单继承多重继承与单继承 一个基类一个基类可以直接可以直接派生出多派生出多个派生类个派生类派生类可以派生类可以由多个基类由多个基类共同派生出共同派生出来,称多重来,称多重继承。继承。8.1.1 8.1.1 类的
16、派生与继承类的派生与继承多重继承:多重继承:如果一个派生类可以同时有多个基类,称为多重如果一个派生类可以同时有多个基类,称为多重继承(继承(multiple-inheritance),这时的派生类同时得到了多),这时的派生类同时得到了多个已有类的特征。个已有类的特征。单继承:单继承:派生类只有一个直接基类的情况称为单继承派生类只有一个直接基类的情况称为单继承(single-inheritance)。)。本讲稿第十三页,共一百一十一页8.1.1 8.1.1 类的派生与继承类的派生与继承 在派生过程中,派生出来的新类同样可以作在派生过程中,派生出来的新类同样可以作为基类再继续派生出更新的类,依此类
17、推形成一为基类再继续派生出更新的类,依此类推形成一个层次结构。直接参与派生出某类称为直接基类,个层次结构。直接参与派生出某类称为直接基类,而基类的基类,以及更深层的基类称为而基类的基类,以及更深层的基类称为间接基类间接基类。类族:类族:同时一个基类可以直接派生出多个派生类。同时一个基类可以直接派生出多个派生类。这样形成了一个相互关联的类族。如这样形成了一个相互关联的类族。如MFC就是这就是这样的族类,它由一个样的族类,它由一个CObject类派生出类派生出200个个MFC类类中的绝大多数。中的绝大多数。多层次继承:多层次继承:本讲稿第十四页,共一百一十一页编制编制派生派生类时类时可分可分四步四
18、步 吸收基类的成员吸收基类的成员 改造基类成员改造基类成员 发展新成员发展新成员重写构造函数与析构函数重写构造函数与析构函数 8.1.1 8.1.1 类的派生与继承类的派生与继承不论是数据成员,还是函数成员,不论是数据成员,还是函数成员,除构除构造函数与析构函数外全盘接收造函数与析构函数外全盘接收 声明一个和某基类成员同名的新成员声明一个和某基类成员同名的新成员,派生类中的派生类中的新成员就屏蔽了基类同名成员称为新成员就屏蔽了基类同名成员称为同名覆盖同名覆盖(override)派生类新成员必须与基类成员不同名,它的派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。加入保证派
19、生类在功能上有所发展。派生编程步骤:派生编程步骤:本讲稿第十五页,共一百一十一页8.1.1 8.1.1 类的派生与继承类的派生与继承第二步中,第二步中,新成员如是成员函数,参数表也必须一样新成员如是成员函数,参数表也必须一样,否则是重载。,否则是重载。第三步中,独有的新成员才是继承与派生的核心特征。第三步中,独有的新成员才是继承与派生的核心特征。第四步是重写构造函数与析构函数,派生类不继承这两种函数。第四步是重写构造函数与析构函数,派生类不继承这两种函数。不管原来的函数是否可用不管原来的函数是否可用一律重写可免出错一律重写可免出错(?)。访问控制:访问控制:亦称为亦称为继承方式继承方式,是对基
20、类成员进一步的限制。访问控制也是三种:,是对基类成员进一步的限制。访问控制也是三种:公有(公有(public)方式,亦称公有继承)方式,亦称公有继承保护(保护(protected)方式,亦称保护继承)方式,亦称保护继承私有(私有(private)方式,)方式,亦称私有继承。亦称私有继承。本讲稿第十六页,共一百一十一页8.1.2 8.1.2 公有派生与私有派生公有派生与私有派生访问限定符两方面含义:访问限定符两方面含义:派生类成员(新增成员)函数对基派生类成员(新增成员)函数对基类(继承来的)成员的访问(调用和操作)类(继承来的)成员的访问(调用和操作),和,和从派生类对象从派生类对象之外对派生
21、类对象中的基类成员的访问之外对派生类对象中的基类成员的访问。class Student:public Person public:Student(string id,string name,Tsex sex,int birthday,string homeadd,string nostud);class Person private:string Name;/姓名姓名public:string GetName()return Name;/提取名字提取名字本讲稿第十七页,共一百一十一页8.1.2 8.1.2 公有派生与私有派生公有派生与私有派生不可直接访问 不可直接访问 private 不可直接
22、访问 private protected 不可直接访问 private public 私有派生 不可直接访问 不可直接访问 private 不可直接访问 protected protected 可直接访问 public public 公有派生 在派生类对象外访问派生类对象的基类成员 在派生类中对基类成员的访问限定 基类中的访问限定 派生方式 公有派生是绝对主流公有派生是绝对主流。本讲稿第十八页,共一百一十一页【例例8.18.1】由在册人员类公有派生学生类由在册人员类公有派生学生类/注意注意Person参数表不用类型参数表不用类型Student:Student(string id,string
23、name,Tsex sex,int birthday,string homeadd,string nostud):Person(id,name,sex,birthday,homeadd)NoStudent=nostud;for(int i=0;i30;i+)/课程与成绩清空课程与成绩清空 csi.coursename=#;csi.grade=0;派生类构造函数派生类构造函数:本讲稿第十九页,共一百一十一页派生类构造函数的定义:派生类构造函数的定义:派生类名派生类名:派生类名(参数总表)派生类名(参数总表):基类名基类名1(参数名表(参数名表1),基类,基类名名2(参数名表(参数名表2),),基
24、类名,基类名n(参数名表(参数名表n),成员对成员对象名象名1(成员对象参数名表(成员对象参数名表1),),成员对象名,成员对象名m(成员对象参(成员对象参数名表数名表m)/派生类新增成员的初始化;派生类新增成员的初始化;/所列出的成员对象名全部为新增成员对象的名字所列出的成员对象名全部为新增成员对象的名字注意:注意:在构造函数的声明中,冒号及冒号以后部分必须略去。在构造函数的声明中,冒号及冒号以后部分必须略去。所谓不能继承并不是不能利用,而是把基类的构造函数作为新所谓不能继承并不是不能利用,而是把基类的构造函数作为新的构造函数的一部分,或者讲调用基类的构造函数。的构造函数的一部分,或者讲调用
25、基类的构造函数。基类名仅指直基类名仅指直接基类,写了底层基类,编译器认为出错接基类,写了底层基类,编译器认为出错。冒号后的基类名,成员对象名的次序可以随意,这里的次序与调用冒号后的基类名,成员对象名的次序可以随意,这里的次序与调用次序无关。次序无关。8.2 8.2 派生类的构造函数与析构函数派生类的构造函数与析构函数本讲稿第二十页,共一百一十一页派生类构造函数各部分执行次序:派生类构造函数各部分执行次序:1.1.调用基类构造函数,按它们在派生类定义的先后顺调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。序,顺序调用。2.2.调用成员对象的构造函数,按它们在类定义中声明调用成员对象的构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 派生 精选 文档
限制150内