在一个类中的虚函数说明,只对派生类中重定义的函数有影响,对它的基类中的函数不起作用。
例:
#include <iostream>
using namespace std;
class A
{
public:
void show()
{
cout<<"The show in A."<<endl;
}
};
class B:public A
{
public:
virtual void show()
{
cout<<"The show in B."<<endl;
}
};
class C:public B
{
public:
void show()
{
cout<<"The show in C."<<endl;
}
};
int main(int argc, const char * argv[])
{
C cobj;
cobj.show();//调用c的show方法。
cobj.B::show();//调用B的show方法。
cobj.A::show();//调用a的show方法。
A &refaobj=cobj;//引用。
refaobj.show();//调用的是 a的show方法。
B &refbobj=cobj;
refbobj.show();//调用的是c的show方法。
refbobj.B::show();//调用的是b的show方法。
return 0;
}
在程序中,我们将类B的show()函数声明为虚函数,所以在类c继承了类B后,它的show()函数也将是虚函数,因此在当类c的对象调用 show()函数时,它调用的是自己的成员。
由于类A中没有声明虚函数,所以它的对象或引用调用show()时,也都将调用的是自己的成员
类B声明自己的show()函数为虚函数,所以类c的对象初始化它的引用,类B的引用调用的是类C的成员函数。