在基类用virtual声明成员函数为虚函数,在派生类中重新定义该虚函数,要求函数名、函数返回类型、函数参数个数和类型与基类的虚函数相同。如果在派生类中没有对基类的虚函数重新定义,则派生类直接简单的继承该虚函数。
有一种情况例外,在这种情况下派生类与基类的成员函数返回类型不同,但仍起虚函数的作用。即基类虚函数返回一个基类指针或基类引用,而子类的虚函数返回一个子类的指针或子类的引用。
在C++中,当一个成员函数定义为虚函数后,其派生类中的同名成员函数都自动为虚函数。
一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同参数(个数与类型)和函数返回值类型的同名函数。
静态成员函数不能是虚函数,因为静态成员函数不受限与某个对象。
inline函数不能是虚函数,因为inline函数是不能在运行中动态确定其位置的,即使虚函数在类的内部定义,编译时,仍将其视为非inline的。
使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译器会为该类构造一个虚函数表(virtual function table, vtable), 它是一个指针数组, 存放每个虚函数的入口地址。
转载于:https://blog.51cto.com/shaxquan/384555