一个面试的简单有关问题,不过不明白,求详解

一个面试的简单问题,不过不明白,求详解!
本帖最后由 Programe_Lover 于 2013-10-28 15:48:22 编辑
刚才去一家公司面试,面试官问:“如果一个父类的指针,指向了派生类的对象,而且在父类和派生类中有着一个函数名,参数列表等完全一样的函数,且该函数不是虚函数,那么当这个指针调用那个函数的时候,到底是调用父类的还是派生类的”
用程序来说就是这样的:
class A
{
public:
  void fun(){cout<<'A';}
}
class B:public A
{
public:
  void fun(){cout<<'B';}
}
A* pA=new B();
pA->fun();
请问它的输出是什么?
请详细解释下这里面的具体原因,不胜感激!
还有,按照书上的定义,这里相当于是隐藏了,但是我感觉这就是重定义,为什么要说它是隐藏,而不是重定义?

------解决方案--------------------
#include "stdio.h"
#include "iostream"
using namespace std;
class A
{
public:
void fun(){cout<<'A';}
};

class B:public A
{
public:
void fun(){cout<<'B';}
};

void main(){
A* pA=new B();
pA->fun();
}

/*输出为A,即使父子函数名相同,但不是虚函数,
多态在这里表现不出来,所以执行父类本身fun(),
[如不正确,请各位指出]*/

------解决方案--------------------
面试官考的是重载、覆盖、隐藏三者的区别,楼主百度下,就知道怎么做了。
------解决方案--------------------
这里是有隐藏,但没重载,更没有覆盖。 但是这题考察的是静态绑定与动态绑定的区别。 lz最好能自己找到答案。