虚函数
对于类的成员函数,如果在前面加上virtual,那么这个成员函数就是虚函数,这个类就是带有虚函数的类。
虚指针,虚表
带没有虚函数的类,与不带虚函数的类之间有什么区别呢?带有虚函数的类比不带虚函数的类会多一个指针,这个指针就是虚指针,而虚指针指向一个表,这个表就叫做虚表。虚表里面存的内容就是虚函数的地址。
例子:
#include <iostream>
using namespace std;
class Base{/*该类中函数均为虚函数*/
public:
virtual void f(){cout<<"Base::f()"<<endl;}
virtual void g(){cout<<"Base::g()"<<endl;}
virtual void h(){cout<<"Base::h()"<<endl;}
Base() : a(0),b(1) { }
private:
int a;
int b;
};
class Base_Two{/*该类中函数均为非虚函数*/
public:
void f(){cout<<"Base::f()"<<endl;}
void g(){cout<<"Base::g()"<<endl;}
void h(){cout<<"Base::h()"<<endl;}
Base_Two() : a(0), b(1) { }
private:
int a;
int b;
};
int main()
{
Base b;
cout<<"Virtual function:"