在C++中子类对象调用父类函数可通过域操作符(::)来实现,表明所调用函数的作用域。
//test.cc
#include <iostream>
using namespace std;
class A
{
public:
virtual void func()
{
cout <<" this is A" << endl;
}
};
class B : public A
{
public:
virtual void func()
{
cout <<" this is B" << endl;
}
};
int main()
{
A a;
B b;
A* c = new B();
a.func(); //this is A
b.func(); //this is B
b.A::func(); //this is A
c->func(); //this is B
c->A::func(); //this is A
return 0;
}
输出如下图:
在上面的列子中,函数func()是否是虚函数对a、b的调用没有影响;指针c是一个指向子类的父类指针,当其直接调用函数func()时,由于func()是虚函数,根据虚函数表的定义,子类的func()将覆盖父类的func()。