向下类型转换,该如何解决

向下类型转换

#include <iostream>
using namespace std;

class A
{
public:
    A(int _a):a(_a){}
    virtual void foo()
    {
        cout<<"A::foo"<<endl;
    }
    void func()
    {
        cout<<"A::func"<<endl;
    }
private:
    int a;
};

class B:public A
{
public:
    B(int _a, int _b):A(_a),b(_b){}
    void foo()
    {
        cout<<"B::foo"<<endl;
    }
    void func2()
    {
        cout<<"B::func2"<<endl;
    }
    void func3()
    {
        cout<<"B::func3"<<endl;
    }
private:
    int b;
};

int main()
{
    B b(1,2);
    A a(5);

    B *pb = (B*)&a;        // 这里实际上最终还是pb指向子类b?
    pb->func();
    pb->func2();
    pb->func3();

    return 0;
}


之前一直没有考虑过这个问题,刚才试了一下,pb竟然可以调用func2和func3.大家给详细解释一下,thx
------解决思路----------------------
非虚函数,按照指针类型,直接调用了
虚函数,才根据对象类型(实际是,去读取对象内部的虚函数表)来调用。
由于没有使用 this 指针,所以没有出错而已。