继承和派生中指针或引用对虚函数和非虚函数的调用规则,该如何处理

继承和派生中指针或引用对虚函数和非虚函数的调用规则
我是一个马上要考二级的学生,这几天对继承和派生中指针或引用对虚函数和非虚函数的调用规则和用delete删除指针对象时应该调用哪个析构函数还不知道。请知道的讲讲,但是我问其他人他们都用面向对象中的多态性来讲,但是我没有学这个。所以麻烦各位用其他方法给我讲解。谢谢。

------解决方案--------------------
只要是类型指向的函数是虚函数(有可能是继承下来的虚函数)就是动态绑定的,那么调用到的函数是根据实际对象来的。

否则就是静态绑定,直接调用对应类型的成员函数。

delete 时析构函数调用仍然遵循这个规则。



struct a{
void f(){
printf("a::f()\n");
}
};

struct b:public a{
virtual void f(){
printf("b::f()\n");
}
};

struct c:public b{
void f(){
printf("c::f()\n");
}
};


c* pc;a*pa;b*pb;

pa=pb=pc=new c;

pc->f(); //c类型里面f是继承至b的,为虚函数,动态绑定,调用c->f()
pb->f(); //b类型里面f是虚函数,动态绑定,调用c->f()
pa->f(); //a类型里面f不是虚函数,静态态绑定,调用a->f()