基类的指针如何调用派生类的函数

基类的指针怎么调用派生类的函数
假如基类的指针p
怎么调用派生类的函数a()

用p->a()是不行的

------解决方案--------------------
这个还要在基类里面声明a()为虚函数才行 不然基类看不到这个函数
------解决方案--------------------
1.用虚函数,比如
class base 
{
public:
virtual void f(){...}
}
class derived : pulbic base
 {}
调用
base *p;
*p=new derived();
p->f();
2.向下转换
base *p;
*p=new derived()
 假设derived class有一函数 fd,而基类没有
则可以
(dynamic_cast<derived *>(p))->fd();
------解决方案--------------------
强制类型转换应该可以
不过我想知道的是
你是有什么特殊需求还是只是在做理论研究