参考另一个so问题
考虑代码:
class Base {
public: 
    virtual void gogo(int a){
        printf(" Base :: gogo (int) \n");
    };
    virtual void gogo(int* a){
        printf(" Base :: gogo (int*) \n");
    };
};
class Derived : public Base{
public:
    virtual void gogo(int* a){
        printf(" Derived :: gogo (int*) \n");
    };
};
int main(){
    // 1)       
    Derived * obj = new Derived ; 
    obj->gogo(7);  // this is illegal because of name hiding
    // 2)      
    Base* obj = new Derived ;
    obj->gogo(7); // this is legal
}
对于案例 2)
调用obj->gogo(7)在运行时解决。
既然obj->gogo(7)是合法的。这似乎暗示 vtable of包含应该隐藏的Derivedptr
    。virtual void gogo(int a)
我的困惑是,由于名称隐藏导致案例 1) 是非法的,那么如何在运行时解决 2) 中的调用
a) Derived 的 vtable 是否包含指向 gogo(int) 的指针。
b) 如果 a) 不为真,对虚函数的调用解析是否继续到基类的 vtable。