一道怪怪的C++问题
1.没见过用struct这样用的
2.结果问题?
#include <iostream>
using namespace std;
struct A
{
int a;
void k( ) { a = 100; }
};
struct B : public A
{
virtual void f( ) { k( ); }
};
void main()
{
B b;
A* a = (A*) (void*) &b;
a-> k();
cout < <b.a < < ' ' < <a-> a < <endl;
}
结果为:-858993460 100
[解决办法]
呵呵,没人看出来吗,这个问题的关键在于,在题中的A,B定义下,
A* a = (A*) (void*) &b;
与
A* a = (A*)&b;
的结果是完全不一样的(两种情况下a指向的地址相差4字节). 你如果用后一种写法结果就正常了.
参见:
http://community.csdn.net/Expert/TopicView3.asp?id=5403017