有人能解释一下为什么下面的代码有效吗,我已经在 Visual Studio .NET 2008、Cygwin 和ideone.com上的 g++ 上进行了测试。更重要的是我想知道它是否有效。请注意A
和B
是不相关的类型。
编辑:在@leftaroundabout 的评论之后,我对我的代码进行了以下更改
#include <iostream>
#include <cstdlib>
class A
{
public:
virtual void Bar()
{
std::cout << "A::Bar() -> " << this << std::endl;
}
virtual void Foo()
{
std::cout << "A::Foo() -> " << this << std::endl;
}
};
class B
{
public:
virtual void Foo()
{
std::cout << "B::Foo() -> " << this << std::endl;
}
};
int main()
{
B* b = reinterpret_cast<B*>( new A );
b->Foo();
return EXIT_SUCCESS;
}
程序输出消息:
A::Bar() -> 0x9806008
基本上,无论调用什么,都会调用第一个虚拟方法。