虚函数
来源:互联网 发布:个人备忘录java程序 编辑:程序博客网 时间:2024/06/04 18:15
普通成员函数的调用实在编译时静态区分;
虚函数实在运行时动态的zhixing ;根据虚函数表;
定义:
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数语法:
virtual 函数返回类型 函数名(参数表) {
函数体 }
用途:
实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。也就是说, 利用多态性,可以在基类和派生类中使用同样的函数名而定义不同的操作,从而实现“一个 接口,多种方法”
虚函数是一个类的成员函数,定义格式如下: virtual 返回类型 函数名(参数表);
关键字virtual指明该成员函数为虚函数。virtual仅用于类定义中,如虚函数在类外定义,不可加virtual。
当某一个类的一个类成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终保持虚函数的特征。
当在派生类中重新定义虚函数(overriding a virtual function,亦译作超载或覆盖)时,不必加关键字virtual。但重新定义时不仅要同名,而且它的参数表和返回类型全部与基类中的虚函数一样,否则联编时出错。
虚函数与在前节中介绍的派生类的第二步——改造类成员,同名覆盖(override)有关:如未加关键字virtual,则是普通的派生类中的新成员函数覆盖基类同名成员函数(当然参数表必须一样,否则是重载),可称为同名覆盖函数,它不能实现运行时的多态性。
例1. 虚函数实现多态性
#include <iostream.h>
class Pet //基类 { public:
virtual void Speak()
{ cout<<"How does a pet speak ?"<<endl; } };
class Cat : public Pet //派生类 { public:
virtual void Speak()
{ cout<<"miao!miao!"<<endl; } }
虚函数的使用限制
应通过指针或引用调用虚函数,而不要以对象名调用虚函数 说明语句
在派生类中重定义的基类虚函数仍为虚函数,同时可以 省略virtual关键字
不能定义虚构造函数,可以定义虚析构函数
虚函数的具体使用:
1. 在一个基类和派生类的成员函数中,可以直接调用等级中的虚函数。此时,需要给据成员函数中的this指正和他所指向的对象来判断调用的是那个函数。
2.在构造函数和析构函数中调用虚函数时,采用静态编译,即它们所调用的虚函数是自己的类或者他的基类中的虚函数,但不是任何派生类中定义的虚函数。
0 0
- 构造函数 虚函数
- 虚函数 inline函数
- 纯虚函数、虚函数、虚析构函数
- 虚函数,虚析构函数,虚函数表
- 普通函数,虚函数,纯虚函数
- 虚函数,纯虚函数,需析构函数
- 构造函数、析构函数、虚函数
- 构造函数 虚函数 虚析构函数
- 虚函数/构造函数/析构函数
- 构造函数&析构函数&虚函数
- 虚函数
- 虚函数
- 虚函数
- 虚函数
- 虚函数
- 虚函数
- 虚函数
- 虚函数
- 操作系统复习——进程管理
- iOS NSString的常用用法
- Android通用——ListView内放置CheckBox
- SLES11 安装git
- UVA11100- The Trip, 2007
- 虚函数
- UVA 532 - Dungeon Master
- Java-SynchronousQueue 阻塞队列小记
- 基于V4L2+OPENCV的摄像头采集与图像处理方案
- UVa 10943 - How do you add?
- 测试Ant构造文件
- 有关SSH的一些整理
- hdu 1385 Minimum Transport Cost(最短路+字典序+打印路径)
- uva10815