虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。 下面是一个实例:
#i nclude "stdio.h"
#i nclude "conio.h"
class Parent
{
public:
char data[20];
void Function1();
virtual void Function2(); // 这里声明Function2是虚函数
}parent;
void Parent::Function1()
{
printf("This is parent,function1/n");
}
void Parent::Function2()
{
printf("This is parent,function2/n");
}
class Child:public Parent
{
void Function1();
void Function2();
} child;
void Child::Function1()
{
printf("This is child,function1/n");
}
void Child::Function2()
{
printf("This is child,function2/n");
}
int main(int argc, char* argv[])
{
Parent *p; // 定义一个基类指针
if(_getch()=='c') // 如果输入一个小写字母c
p=&child; // 指向继承类对象
else
p=&parent; // 否则指向基类对象
p->Function1(); // 这里在编译时会直接给出Parent::Function1()的入口地址。
p->Function2(); // 注意这里,执行的是哪一个Function2?
return 0;
}
当我们输入小写字母C时,输出为:
This is parent,function1
This is child,function2
这里虽然parent类的指针调用的是Child类的对象,但非虚函数指针采用的是编译时赋值,而编译时parent并不知道实际指向哪个类(直到运行时才知道),所以它只能将parent类的函数的地址赋给指针.但虚函数采用的是动态联编,它可以在运行时判断指针指向的对象,并自动调用函数的函数.
故当我们输入其他字母时,输出为:
This is parent,function1
This is parent,function2
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ysr1980/archive/2007/07/16/1694153.aspx