C++,父类指针到子类指针的强制类型转换解决方案

C++,父类指针到子类指针的强制类型转换

class Base
{
public:
void fun() {cout << "Base's funciton" <<endl;}
};

class Derived: public Base
{
public:
void fun() { cout << "Derived's function" <<endl;}
};


int main()
{
Base b;
Derived *d=(Derived_5*) &b;
d->fun();

system("pause");
return 0;
}
该程序输出:Derived's function,若将父类的成员函数声明为虚函数,则输出:Base's funciton。
请问为什么会这样,对象是如何确定调用哪个函数的?

------解决方案--------------------
虚函数根据对象里面虚函数表里的函数指针确定调用的函数.
非虚函数根据指针的类型确定调用的函数.
------解决方案--------------------
this 指向的对象, 前 4 个字节是一个指针, 这个指针指向一张表(虚函数表 vTable), 里面放的是这个类的虚函数的实现函数的地址.
详见深入解析C++对象模型一书.

这个不符合虚函数调用, 而且其行为是未定义的. 如果你的 Derived 类有一个成员变量, 并且在 fun 里面使用一下这个变量, 你的程序很可能就会崩溃.