虚函数

本文介绍了虚函数的概念及其在C++中的应用,包括如何通过虚函数实现多态性,并探讨了虚函数与同名覆盖的区别及虚函数的使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通成员函数的调用实在编译时静态区分;

虚函数实在运行时动态的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.在构造函数和析构函数中调用虚函数时,采用静态编译,即它们所调用的虚函数是自己的类或者他的基类中的虚函数,但不是任何派生类中定义的虚函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值