虚函数 纯虚函数的用法

来源:互联网 发布:电脑软件下载管家 编辑:程序博客网 时间:2024/05/19 04:02

虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。  下面是一个实例:

#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