




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
继承与多态本章内容第一节继承第二节多态第一节类一、继承的概念继承就是在一个已存在的类的基础上创建一个新类父类(基类)是已存在的类子类(派生类)是新建立的类子类只有一个父类,称为单继承。一个子类可以有两个或多个父类,称为多继承。派生和继承实际上是从不同的角度描述了同一个概念。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。子类继承了父类,父类派生出子类。二、派生类定义派生类定义形式:class子类名:继承方式父类名{ //子类新定义的成员}父类名是已有类的名称,子类名是新建的类名。继承方式有public(公有继承)、private(私有继承)和protected(保护继承)。默认的继承方式是private。例15-1:基类和派生类的定义和使用。将Student类和Teacher类的公有数据提取出来,封装成Person基类。由基类派生出Student类和Teacher类,Student类和Teacher类包含了新增成员。#include<iostream>usingnamespacestd;//基类Person,数据成员有姓名、年龄和性别;成员函数有输入数据和输出数据classPerson{private: stringname; //姓名 intage; //年龄 stringgender; //性别public: voidset(stringxm,intnl,stringxb)//成员函数:输入数据 { name=xm;age=nl;gender=xb; } voiddisplay() //成员函数:输出数据 { cout<<name<<""<<age<<""<<""<<gender<<""; }};//派生类Student,除了继承Person基类的成员,还新增了成员classStudent:publicPerson{private: stringmajor; //新增私有成员:学生的专业public: //新增成员函数
voidsetStu(stringzy) //设置学生的专业
{ major=zy; } voiddisplayStu() //输出学生的专业
{ cout<<major<<endl; }};//派生类Teacher,除了继承Person的成员,还新增了成员classTeacher:publicPerson{private: stringprofession; //新增私有成员:教师的职称public: //新增成员函数
voidsetTea(stringxm,intnl,stringxb,stringzc) { profession=zc; set(xm,nl,xb);//派生类函数中直接调用基类的公有成员set() } voiddisplayTea() { display(); //派生类函数中直接调用基类的公有成员display() cout<<profession<<endl; }};intmain(){ Students; //派生类对象s s.set("李派生",18,"famale");//派生类对象直接调用基类的公有成员set() s.setStu("计算机"); //派生类对象直接调用自己的公有成员setStu() s.display(); //派生类对象直接调用基类的公有成员display() s.displayStu(); //派生类对象直接调用自己的公有成员displayStu() Teachert; //派生类对象t t.setTea("梁继承",50,"male","教授");//直接调用自己的公有成员setTea() t.displayTea(); ////直接调用自己的公有成员displayTea()}三、子类对父类的访问权限子类继承了父类的全部成员,除了构造函数和析构函数子类可以访问父类的公有成员以公有继承(Public)方式创建的子类对父类成员的访问权限:子类无法直接访问父类的私有成员第二节多态一、多态的概念多态按字面的意思就是多种形态,多态是指不同的对象完成某个行为时会产生不同的状态和结果。二、多态的形式编译时的多态多态运行时的多态函数重载运算符重载运行时多态的条件:有继承关系父类中的成员函数是虚函数,且子类重写虚函数通过父类的指针或者引用调用虚函数三、虚函数virtual函数类型函数名(参数表);{ //函数体}虚函数是在基类中声明为virtual的成员函数。虚函数对于多态具有决定性的作用,有虚函数才能构成多态。1、虚函数的声明形式例15-2:当学校的上课铃响之后,学生(Student)、教师(Teacher)和校长(Principal)会对“铃声响”表现出不同的行为。用虚函数实现多态。在基类中声明一个虚函数,然后在一个或多个派生类中对其进行重写。形式上是调用从基类继承的同一个成员函数,实际上会自动调用各自派生类的同名成员函数,这就是所谓的多态。简而言之就是“一种接口,多种方法”。#include<iostream>usingnamespacestd;//父类PersonclassPerson{private: stringname; //姓名
intage; //年龄
stringgender; //性别public: virtualvoidbellring() //父类虚函数
{ cout<<"铃声响,我是......"<<endl; }};//子类StudentclassStudent:publicPerson{public: voidbellring()//子类虚函数
{ cout<<"铃声响,我是学生,在教室听课"<<endl; }};//子类TeacherclassTeacher:publicPerson{public: voidbellring()//子类虚函数
{ cout<<"铃声响,我是教师,在教室讲课"<<endl; }};//子类PrincipalclassPrincipal:publicPerson{public: voidbellring() //子类虚函数
{ cout<<"铃声响,我是校长,在校园检查"<<endl; }};intmain(){ Person*p; //声明父类对象指针p Students; //声明Student类的对象s p=&s; //用Student对象的地址给父类指针赋值
p->bellring(); //调用Student对象的成员函数bellring()
Teachert; //声明Teacher类的对象s p=&t; //用Teacher对象的地址给父类指针赋值
p->bellring(); //调用Teacher对象的成员函数bellring() Principalpr; //声明Principal类的对象s p=&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年调酒师实践技能题型及试题及答案
- 2025建筑工程施工合同风险识别与应对策略研究
- 四川省南充市顺庆区南充高级中学2024-2025学年高一下学期4月月考语文试题
- 2025企业简化的租赁合同范本
- 2025室内装修施工合同
- 2025年关于以设备为租赁物的融资租赁合同效力分析
- 法治助力乡村振兴的路径与实践
- 2025年农产品贸易合作合同协议
- 开封文化艺术职业学院《大数据分析与处理》2023-2024学年第二学期期末试卷
- 吕梁职业技术学院有机化学上2023-2024学年第二学期期末试卷
- 奶制品风味物质合成与改良技术
- 2024年6月四川省高中学业水平考试生物试卷真题(含答案详解)
- 2023-2024学年辽宁省沈阳市南昌中学八年级(下)月考英语试卷(4月份)
- 国服中山装的设计特点及含义
- TB10001-2016 铁路路基设计规范
- 19S406建筑排水管道安装-塑料管道
- KA-T 20.1-2024 非煤矿山建设项目安全设施设计编写提纲 第1部分:金属非金属地下矿山建设项目安全设施设计编写提纲
- 绿色生活实践
- (2024年)硫化氢安全培训课件
- 《聚焦超声治疗》课件
- 2023-2024学年高一下学期第一次月考(湘教版2019)地理试题(解析版)
评论
0/150
提交评论