读书人

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

发布时间: 2012-04-06 12:22:24 作者: rapoo

金山的一道笔试题
#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'了,

读书人网 >C++

热点推荐