c++中void*指针的转换有关问题

c++中void*指针的转换问题
有四个类,Base,Child,GrandChild,Base1这个四个类,然后Base中有一个virtual f()函数,child中没有覆写这个函数,在grandchild中覆写了这个函数,grandchild继承了base1和child类,base1中没有任何东西。

在main中什么都没打印出来,不知道为什么会这样。但是在class GrandChild:public Base1,public Child中换一下Base1和Child的位置的话,就可以打印出来grandchild.f(),我困惑的很。。。。请高手帮忙解答下。谢谢了先。
#ifndef BASE_H
#define BASE_H


class Base
{
    public:
        Base();
        virtual void f();   //实现为打印base.f()
        virtual ~Base();
};

#endif // BASE_H

#ifndef CHILD_H
#define CHILD_H

#include "Base.h"
class Child:public Base
{
    public:
        Child();
        virtual ~Child();
    protected:
    private:
};

#endif // CHILD_H

#ifndef GRANDCHILD_H
#define GRANDCHILD_H

#include<Child.h>
#include<Base1.h>
class GrandChild:public Base1,public Child
{
    public:
        GrandChild();
        virtual void f();   //打印grandchild.f()
        virtual ~GrandChild();
    protected:
    private:
};

#endif // GRANDCHILD_H

#ifndef BASE1_H
#define BASE1_H


class Base1
{
    public:
        Base1();
        virtual ~Base1();
    protected:
    private:
};

#endif // BASE1_H

#include <iostream>

#include<Base.h>
#include<GrandChild.h>
using namespace std;
int main()
{
    void *v = new GrandChild();
    Base *b = (Base*)v;
    b->f();//什么都没打印出来
    return 0;
}



------解决方案--------------------

 void *v = new GrandChild();
Base *b = (GrandChild*)v;