转自:http://zhidao.baidu.com/question/314680295.html
长篇大论这里就不说了,举个例子 class fruit { public: void func() { printf("fruit\n"); } virtual void vfunc() { printf("v fruit\n"); } }; class apple:public fruit { public: void func() { printf("apple\n"); } void vfunc() { printf("v apple\n"); } }; int main(int argc, char* argv[]) { fruit* f = new apple(); //注意 f是父类指针 f->func(); f->vfunc(); return 0; } 结果是: fruit v apple 例子中func采用了函数覆盖 vfunc采用了虚函数 当fruit类的指针指向一个apple类的对象时,func调用了父类的函数,vfunc调用了子类的函数。 如过是函数覆盖,调用成员函数时,直接调用对象指针所属类的成员函数,例子中为fruit 虚函数的情况下,调用成员函数时,调用的是指向对象的所属类的成员函数,例子中为apple