中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第17讲 抽象类

第17讲抽象类 教学目的与要求: 了解抽象类的综合程序设计 掌握纯虚函数和抽象类。 教学内容提要: 纯虚函数; 2、抽象类; 3、综合举例; 教学重点:纯虚函数与抽象类的声明和使用。 教学难点:纯虚函数与抽象类的声明和使用。 教学进度:P210~P217 教学过程:
第17讲 抽象类 •教学目的与要求: 了解抽象类的综合程序设计。 掌握纯虚函数和抽象类。 •教学内容提要: 1、 纯虚函数; 2、抽象类; 3、综合举例; •教学重点:纯虚函数与抽象类的声明和使用。 •教学难点:纯虚函数与抽象类的声明和使用。 •教学进度:P210~P217 •教学过程:

171纯虚函数 1、纯虚函数是一个在基类中说明的虚函数,它在该基类中没有 定义具体的操作内容,要求各派生类根据实际需要定义自己 的版本。 2、纯虚函数的声明格式为: virtual函数类型函数名(参数表)=0; 注意: (1)、声明为纯虚函数之后,基类中就不再给出函数的实现部 分。 (2)、纯虚函数的函数体由派生类给出。 (3)、在C++中,还有一种情况是空的虚函数,空的虚函数是 指函数体为空的虚函数,请注意它和纯虚函数的区别。纯虚 函数根本就没有函数体,而空的虚函数的函数体为空(如: {}),前者所在的类是抽象类,不能直接进行实例化(不能 定义对象),而后者所在的类是可以实例化的
17.1 纯虚函数 1、纯虚函数是一个在基类中说明的虚函数,它在该基类中没有 定义具体的操作内容,要求各派生类根据实际需要定义自己 的版本。 2、纯虚函数的声明格式为: virtual 函数类型 函数名(参数表)=0; 注意: (1)、声明为纯虚函数之后,基类中就不再给出函数的实现部 分。 (2)、纯虚函数的函数体由派生类给出。 (3)、在C++中,还有一种情况是空的虚函数,空的虚函数是 指函数体为空的虚函数,请注意它和纯虚函数的区别。纯虚 函数根本就没有函数体,而空的虚函数的函数体为空(如: { }),前者所在的类是抽象类,不能直接进行实例化(不能 定义对象),而后者所在的类是可以实例化的

例17纯虚函数的使用。 #include class circle i public void setr(int xr=x; virtual void showo=0;∥纯虚函数 protected int re class Area: public Circlet public void showoi cout<<Area is"<<3.14 r*r<<endl; ∥重定义虚函数shw( class perimeter: public circle public void showoicout<<Perimeter is<<2*3.14*r<<endl; ∥重定义虚函数show(
例17.1纯虚函数的使用。 #include class Circle { public: void setr(int x){ r=x; } virtual void show()=0; // 纯虚函数 protected: int r; }; class Area:public Circle{ public: void show(){ cout<<"Area is "<<3.14*r*r<<endl;} }; // 重定义虚函数show() class Perimeter:public Circle{ public: void show(){cout<<"Perimeter is "<<2*3.14*r<<endl;} }; // 重定义虚函数show( )

void maino Circle *ptrs Area obl Perimeter ob2 obl. setr(10) ob2 setr(10); ptr=&obl; ptr->show 0; ptr=&ob2 ptr->showO
void main() { Circle *ptr; Area ob1; Perimeter ob2; ob1.setr(10); ob2.setr(10); ptr=&ob1; ptr->show(); ptr=&ob2; ptr->show(); }

172抽象类 抽象类是一种特殊的类,它为一族类提供统一的操作界 面 1、抽象类:带有纯虚函数的类 2、抽象类的特征: (1)、抽象类不能实例化,即不能定义一个抽象类的对象主 要作用是通过它为一个类族建立一个公共的接口,使它们 能够更有效地发挥多态特征。而接口的完整实现(即纯虚函 数的函数体),要由派生类自己给出。 (2)、抽象类派生出新的类之后,如果派生类给出所有纯虚 函数的函数实现,这个派生类就可以定义自己的对象,因 而不再是抽象类;反之,如果派生类没有给出全部纯虚函 数的实现,还继承了部分纯虚函数,这时的派生类仍然是 个抽象类
17.2 抽象类 抽象类是一种特殊的类,它为一族类提供统一的操作界 面。 1、抽象类:带有纯虚函数的类 2、抽象类的特征: (1)、抽象类不能实例化,即不能定义一个抽象类的对象主 要作用是通过它为一个类族建立一个公共的接口,使它们 能够更有效地发挥多态特征。而接口的完整实现(即纯虚函 数的函数体),要由派生类自己给出。 (2)、抽象类派生出新的类之后,如果派生类给出所有纯虚 函数的函数实现,这个派生类就可以定义自己的对象,因 而不再是抽象类;反之,如果派生类没有给出全部纯虚函 数的实现,还继承了部分纯虚函数,这时的派生类仍然是 一个抽象类

例172分析下列程序的运行结果 include“ iostream. h” class bo i public virtual void display()=0 class B1: public BO p ublic virtual void display) {cout<<”Bl: dislay()”<≤endl
例17.2分析下列程序的运行结果

class D1: public B1 void maino) i public {B0*p, virtual void display() B1b1; D1 d1 i coutdisplay(); 3 fun(p)

例173定义一个 shape抽象类,在此基础上派生出 rectangle类 和 circle类,二者都有 getarea(函数计算对象的面积, getperim()函数计算对象的周长 #include iostream h" class circle public shape class shape i public i public circle(float r)i radius=, 1 shape( 3 wcircleoix float getareao) wshape([3 I return 3. 14159*radius*radius, 1 virtual float getarea(0 float getperim( virtual float getperim(F0 i return 2*3. 14159*radi private float radius
例17.3 定义一个shape抽象类,在此基础上派生出rectangle类 和circle类,二者都有getarea( )函数计算对象的面积, getperim( )函数计算对象的周长

class rectangle public shape float length, width i public rectangle(float 1, float w) void maint i length= i shape *sp width=w sp=new circle() coutgetarea()getperim()getarea()getperim()<<endl delete sp

17.3综合实例】 现假设某高校按如下方式确定教师工资:对于在某一学科取得突出成 就的学术带头人聘为特聘教授,给予每月1000元的津贴;对于其他有突 出贡献的教学科研骨干聘为责任教授,给予每月5000元的津贴。普通教学 和科研人员则从其教学课时和科研经费中获得补助。特聘教授和责任教授 原工资待遇不变。 根据上述要求,可以声明基类为教师( Teacher),该基类包含一些所有教师 共有的数据比如教师的姓名、级别、编号、月工资;该基类的成员函数中 计算工资、显示教师的基本信息可以考虑声明为纯虚函数,因为对于抽象 的教师类来说,这些成员函数不具有实际意义。 注 该程序的类图如图所示 综合实例程序如下:
现假设某高校按如下方式确定教师工资:对于在某一学科取得突出成 就的学术带头人聘为特聘教授,给予每月10000元的津贴;对于其他有突 出贡献的教学科研骨干聘为责任教授,给予每月5000元的津贴。普通教学 和科研人员则从其教学课时和科研经费中获得补助。特聘教授和责任教授 原工资待遇不变。 该程序的类图如图所示 综合实例程序如下: 注 根据上述要求,可以声明基类为教师(Teacher),该基类包含一些所有教师 共有的数据比如教师的姓名、级别、编号、月工资;该基类的成员函数中 计算工资、显示教师的基本信息可以考虑声明为纯虚函数,因为对于抽象 的教师类来说,这些成员函数不具有实际意义。 【 17.3 综合实例】
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第16讲 多态性与虚.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第15讲 赋值兼容.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第14讲 多继承.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第13讲 派生的构造函数和析构函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第12讲 派生类的概念.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第11讲 静态成员及友元.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第10讲 对象数组和指针及对象作为函数参数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第10章 Visual C++编程实例.ppt
- 《单片机相关电子图书资料》第十一章 PIC 单片机的 C 语言编程.pdf
- 《单片机相关电子图书资料》精彩51单片机教程.pdf
- 《单片机相关电子图书资料》51单片机C编程.pdf
- 山东大学:《Visual C++程序设计》第4章 C++的流程控制语句(张晓如).ppt
- 山东大学:《Visual C++程序设计》第10章 构造函数和析构函数(张晓如).ppt
- 山东大学:《Visual C++程序设计》第14章 输入/输出流类库(张晓如).ppt
- 山东大学:《Visual C++程序设计》第12章 类的其他特性(张晓如).ppt
- 山东大学:《Visual C++程序设计》第13章 运算符重载(张晓如).ppt
- 山东大学:《Visual C++程序设计》第11章 继承和派生类(张晓如).ppt
- 山东大学:《Visual C++程序设计》第6章 数组(张晓如).ppt
- 山东大学:《Visual C++程序设计》第8章 指针和引用(张晓如).ppt
- 山东大学:《Visual C++程序设计》第5章 函数和编译预处理(张晓如).ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第18讲 运算符重载.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第19讲 几种常见的运算符重载及类型转换函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第1讲 面向对象程序设计概述.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第20讲 模板.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第21讲 用指针处理链表.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第21讲 模板应用.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第22讲 C++的输入和输出.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第23讲 文件输入和输出.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第24讲 综合应用举例.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第2讲 C++基础.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第3讲 基本数据类型.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第4讲 函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第5讲 函数重载和变量的作用域.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第6讲 动态内存分配和引用.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第7讲 类和对象的声明.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第8讲 构造函数和析构函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第9讲 拷贝构造函数和对象成员.ppt
- 《单片机原理与应用》课程教学资源(PPT课件讲稿)第一章 单片机基础知识.ppt
- 《单片机原理与应用》课程教学资源(PPT课件讲稿)第三章 MCS-51单片机指令系统及汇编语言程序设计.ppt
- 《单片机原理与应用》课程教学资源(PPT课件讲稿)第五章 MCS-51系统扩展技术.ppt