知识点

 类虚函数概念

 类虚函数定义virtual


一、虚函数

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数


二、虚函数定义


定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数

语法:virtual 函数返回类型 函数名(参数表) { 函数体 } //public protected

用途实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数


//基类A.h

virtual void printA(void)
{
    cout<<"基类的打印函数"<<endl;
}

//派生类B.h

public:
    void printA(void)
    {
        cout<<"派生类的打印函数"<<endl;
    }

//ClassAB.cpp

CB1 b1;
CA *pa=(CA*)&b1;
pa->printA();


程序输出结果:

派生类的打印函数




定义虚函数的限制:

(1)类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。因为,将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。   (2)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。   

(3)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数自动成为虚函数。   

(4)如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。   


虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。

虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。