简单说来使用了虚函数表.
2、虚函数,动态编译,可以选择同类族中不同类的虚函数
虚函数的作用是实现动态联编,(联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联
编。)也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数
重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口。
注意以下程序的输出结果:
1、无虚函数,即静态编译,故只能根据指针的声明类型来选择函数
#include <iostream>
using namespace std;
class CParent{
private:
int a;
int b;
public:
CParent(int x,int y)
{
a = x;
b = y;
}
~CParent(){}
void show()
{
cout<<"CParent-----------"<<endl;
cout<<a<<" "<<b<<endl;
}
};
class CChild:public CParent
{
private:
int c;
public:
CChild(int x,int y, int z):CParent(x,y)
{
c = z;
}
void show()
{
cout<<"CChild-----------"<<endl;
cout<<c<<endl;
}
};
int main()
{
CParent mp(60,60),*pc;
CChild mc(10,20,30);
pc = & mp;
pc->show();
pc = & mc;
pc->show();
}
2、虚函数,动态编译,可以选择同类族中不同类的虚函数
#include <iostream>
using namespace std;
class CParent{
private:
int a;
int b;
public:
CParent(int x,int y)
{
a = x;
b = y;
}
~CParent(){}
virtual void show()
{
cout<<"CParent-----------"<<endl;
cout<<a<<" "<<b<<endl;
}
};
class CChild:public CParent
{
private:
int c;
public:
CChild(int x,int y, int z):CParent(x,y)
{
c = z;
}
virtual void show()
{
cout<<"CChild-----------"<<endl;
cout<<c<<endl;
}
};
int main()
{
CParent mp(60,60),*pc;
CChild mc(10,20,30);
pc = & mp;
pc->show();
pc = & mc;
pc->show();
}