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

金山的一道笔试题,该如何解决

2012-04-06 
金山的一道笔试题#includeiostreamusing namespace stdstruct a{}struct b:public a{virtual void m()

金山的一道笔试题
#include<iostream>
using namespace std;

struct a
{
};

struct b:public a
{
virtual void m(){cout<<'m';}
};

struct c:public a
{
virtual void n(){cout<<'n';};
};

int main(void)
{
c *p=(c*)new b;
p->n();

system("pause");
return 0;
}

//求程序运行结果
//vc2010编译结果为:m

==========================
金山的一道笔试题。
请问可以这样写吗?
哪位大牛能不能给分析下,谢谢!

[解决办法]
可以,内存结构相同
c *p=(c*)new b;
P真正指向的是B;
p->n();这个只当做是指针的运算即可,实际上是B的偏移位置,实际上调用的是b::m();
所以输出M,表达能力不是很好,凑合着看看吧
[解决办法]
p虚函数表指向的地址是b的函数m
[解决办法]
可以是可以啊~~~~~


强制转换类型。

的确是M,因为是cout<<'m'了,

热点排行