首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-10-29 
一个面试的简单问题,不过不明白,求详解!本帖最后由 Programe_Lover 于 2013-10-28 15:48:22 编辑刚才去一

一个面试的简单问题,不过不明白,求详解!
本帖最后由 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最好能自己找到答案。 

热点排行