一个面试的简单问题,不过不明白,求详解!
本帖最后由 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(),
[如不正确,请各位指出]*/