《vc++课件》虚函数和抽象类

虚函数和抽家类
虚函数和抽象类

士主要内容 虚函数的使用 ■抽象类的概念和定义 n纯虚函数的使用
◼ 虚函数的使用 ◼ 抽象类的概念和定义 ◼ 纯虚函数的使用 主要内容

虚函数的使用 虚函数是动态联编的基础。 是非静态的成员函数。 在类的定义中,在函数原型之前写 virtual virtual只用来说明类定义中的原型,不能用在函数实 现时。 具有继承性,基类中定义了虚函数,派生类中无论是 否说明,同原型函数都自动为虚函数 本质:不是重载定义而是覆盖定义。 调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数
◼ 虚函数是动态联编的基础。 ◼ 是非静态的成员函数。 ◼ 在类的定义中,在函数原型之前写virtual。 ◼ virtual 只用来说明类定义中的原型,不能用在函数实 现时。 ◼ 具有继承性,基类中定义了虚函数,派生类中无论是 否说明,同原型函数都自动为虚函数。 ◼ 本质:不是重载定义而是覆盖定义。 ◼ 调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数。 虚函数的使用

士写出运行结果 #include iostream. h> class bo∥类声明 public:∥外部接口 virtual void display)∥虚成员函数 scout<<B0: display"<<endl;
写出运行结果 #include class B0 //基类声明 { public: //外部接口 virtual void display() //虚成员函数 {cout<<"B0::display()"<<endl;} };

class b1: public bo∥公有派生 i public void display i cout<<Bl: display( "endl class dl: public bl∥公有派生 i public void display i cout<< DI: display"<<endl
class B1: public B0 //公有派生 { public: void display() { cout<<"B1::display()"<<endl; } }; class D1: public B1 //公有派生 { public: void display() { cout<<"D1::display()"<<endl; } };

void fun(BO*ptr)/普通函数 i ptr->display: j void maino∥主函数 B0Ob0,*p;∥声明基类对象和指针 Blbl;∥声明派生类对象 D1d1;/声明派生类对象 p=&bo fun(p),∥调用基类BO函数成员 p=&bl fun(p);∥调用派生类B1函数成员 p=&dI fun(p);∥调用派生类D1函数成员
void fun(B0 *ptr) //普通函数 { ptr->display(); } void main() //主函数 { B0 b0, *p; //声明基类对象和指针 B1 b1; //声明派生类对象 D1 d1; //声明派生类对象 p=&b0; fun(p); //调用基类B0函数成员 p=&b1; fun(p); //调用派生类B1函数成员 p=&d1; fun(p); //调用派生类D1函数成员 }

程序的运行结果为: BO: display ■B1: display( D1: display o
◼ 程序的运行结果为: ◼ B0::display() ◼ B1::display() ◼ D1::display()

虚函数与构造函数 虚函数用于实现不同对象有不同的行为, 是实现运行时多态的基础,是针对对象 而言的 而构造函数是在对象尚未完全建立起来 的时候执行的。因此将构造函数声明为 虚函数是没有意义的
◼ 虚函数用于实现不同对象有不同的行为, 是实现运行时多态的基础,是针对对象 而言的。 ◼ 而构造函数是在对象尚未完全建立起来 的时候执行的。因此将构造函数声明为 虚函数是没有意义的。 虚函数与构造函数

虚函数与析构函数 ■例1示例虚函数与析构函数 ■析构函数可以是虚函数,也往往被定义 为虚函数。 般来说,若某类中有虚函数,则其析 构函数也应当定义为虚函数。 ■如果一个类的析构函数是虚函数,那么 由它派生的所有子类的析构函数都是虚 函数。保证对象的销毁工作彻底完成
◼例1 示例虚函数与析构函数 ◼析构函数可以是虚函数,也往往被定义 为虚函数。 ◼一般来说,若某类中有虚函数,则其析 构函数也应当定义为虚函数。 ◼如果一个类的析构函数是虚函数,那么 由它派生的所有子类的析构函数都是虚 函数。保证对象的销毁工作彻底完成。 虚函数与析构函数

纯虚函数与抽家类 Shape →抽象类 Int x,y drawL; //KlE 纯虚函数 area( //AE setvalued Square Circle drawL drawL a0: area areao
纯虚函数与抽象类 抽象类 纯虚函数 Square draw(); area(); Circle draw(); area(); Shape draw();//虚 area();//虚 setvalue(); int x,y;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《vc++课件》类的构造和析构.ppt
- 《vc++课件》静态成员和友元.ppt
- 《C++程序设计实验指导书》(第四版)电子课件.doc
- 《MATLAB》课程教学讲稿(PPT电子课件)第四讲 matlab 绘图.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第六讲 matlab工具箱.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第五讲 matlab句柄绘图.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第二讲 MATLAB的数值计算.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第三讲 MATLAB的符号运算.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第七讲 matlab的程序设计.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第一讲 MATLAB语言概述.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第9章 MATLAB符号计算.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第8章 MATLAB数值积分与微分.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第7章 MATLAB解方程与函数极值.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第6章 MATLAB数据分析与多项式计算.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第5章 MATLAB绘图.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第4章 MATLAB文件操作.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第3章 MATLAB程序设计.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第1章 MATLAB操作基础.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第13章 在Word环境下使用MATLAB.ppt
- 《MATLAB》课程教学讲稿(PPT电子课件)第12章 Simulink动态仿真集成环境.ppt
- 《vc++课件》继承.ppt
- 《vc++课件》多继承和虚基类.ppt
- 《vc++课件》多态.ppt
- 《vc++课件》模板和IO流.ppt
- 《vc++课件》Windows编程基础.ppt
- 《vc++课件》单文档应用程序设计.ppt
- 《vc++课件》对话式应用程序设计.ppt
- 《vc++课件》c++基础1.ppt
- 《vc++课件》c++基础2.ppt
- 《vc++课件》类的设计和对象的使用.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第一章 C程序概述.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第二章 C程序设计基础.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第三章 程序的控制结构.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第四章 数组.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第五章 指针.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第六章 函数.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第七章 结构体与共用体.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第八章 文件访问.ppt
- 成都理工大学工程技术学院:《C程序设计教程》第九章 变量的作用域与生存期.ppt
- 天津大学:《数据结构 Data Structures》课程PPT教学课件(英文版)Chapter 10 The Disjoint Set ADT.ppt