This is not how it works - it is:
CBase *pBase = new CChild;
pBase->vfunc();
virtualfunction calls are solved dynamically by pointers and links (unless you call the method explicitly, as you did). This means that it does not matter what you tell the compiler, a pointer, it will look for a method in vftable. In your case it is vftableof CBase.