class Base {
public:
Base() {};
virtual void func() {};
};

class Sub: public Base {
public:
Sub() {};
virtual void func() {};
};

Sub a();
std::vector<Base> b;
b.push_back(a);
b[0].func();
これだと継承前のBaseのfuncが実行されてSubのfuncが実行されないんですが
Subのfuncを実行するにはどうしたらいいですか