第六章 多态性与虚函数

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Rectangle Draw()
void main() {
Circle Draw()
Graphic * agraphic; Rectangle * arect=new Rectangle(); agraphic=arect; agraphic->Draw(); Circle * acircle=new Circle(); agraphic=acircle; agraphic->Draw(); }
void main() { Graphic g; g.Draw(); Rectangle * arect=new Rectangle(); arect->Draw(); Graphic *p=arect; p->Draw(); }
课后作业
1、武器中有手枪,大炮和导弹等,这些武器都 有发射功能。 请用纯虚函数和抽象类的概念来设计他们。
第六章 多态性与虚函数
Graphic Draw()
继承中的指针
class Graphic{ public: void Draw() {cout<<"draw a graphic now "<<endl;} }; class Rectangle:public Graphic{ public: void Draw() {cout<<"draw a rectangle now "<<endl;} }; class Circle:public Graphic{ public: void Draw() {cout<<"draw a circle now "<<endl;} };
纯虚函数
• 有的类没有或不需要实例,即从不创建 对象; • 你希望所有派生类都必须重定义自己的 虚函数 ——使用纯虚函数
纯虚函数—语法
virtual 函数类型 函数名(参数)=0; 注意:纯虚函数可以而且应该没有函数体, 因为他从来不被执行 例如:
class Graphic{ public: virtual void Draw()=0; };
实验八 继承性与派生类
• 实验目的: 1、掌握继承的语法格式; 2、掌握派生类的成员访问控制属 性; • 实验内容: 1、调试习题2和4,给出实验结果;
来自百度文库
静态绑定
• 绑定:将一个函数调用链接上相应于函 数体代码的过程。 • 静态绑定(static banding):在编译时确 (static banding) 定函数所调用的函数体。
fun base fun desend fun fun
运行时多态性——虚函数
定义:类中具有保留字virtual的函数称为虚函数。 语法: virtual 返回类型 类名::函数名(参数) {函数体} 例:
main() Rectangle * arect=new Rectangle(); arect->Draw();
以下程序是否有错?输出 结果是什么?
#include <iostream.h> class Graphic{ public: virtual void Draw()=0 { cout<<"draw a graphic"<<endl; } }; class Rectangle:public Graphic{ public: void Draw() {cout<<"draw a rectangle now "<<endl;} };
}
动态绑定
动态绑定(dynamic binding):必须到程序运 行时才可确定调用的函数体。
fun base fun Virtual func Virtual func desend fun Virtual func Virtual func fun
问题
• 什么是Graphic? 画一个圆可以,但画一个图形??? 怎么画?
抽象类
定义:如果一个类至少有一个纯虚函数,那么该 类成为抽象类。 规则: 1、抽象类可以有非纯虚成员; 2、抽象类不能建立对象(可以建立指针); 3、抽象类不能用作参数类型、函数返回类型或 显示转换的类型。

#include <iostream.h> void class Graphic{ { public: virtual void Draw()=0; }; } class Rectangle:public Graphic{ public: void Draw() {cout<<"draw a rectangle now "<<endl;} };
class Graphic{ public: virtual void draw() { cout<<" draw a graphic"<<endl; } };
问题解决
class Graphic{ void main() public: virtual void Draw() { {cout<<"draw a graphic now "<<endl;} }; Graphic * agraphic; class Rectangle:public Graphic{ Rectangle * arect=new Rectangle(); public: void Draw() agraphic=arect; {cout<<"draw a rectangle now "<<endl;} agraphic->Draw(); }; class Circle:public Graphic{ Circle * acircle=new Circle(); public: agraphic=acircle; void Draw() {cout<<"draw a circle now "<<endl;} agraphic->Draw(); };
相关文档
最新文档