如何在基类里调用派生类的函数

怎么在基类里调用派生类的函数。
[code=C/C++][/code]
class A
{

};
class B:public A
{
public:
  void speek();

};
能够用A调用speak()吗?

------解决方案--------------------
强制转换可以办到
------解决方案--------------------
我可以明确的告诉你,这是可以的!
------解决方案--------------------
C/C++ code
//用virtual 关键字

------解决方案--------------------
探讨

C/C++ code

#include <stdio.h>

template <typename T>
class A
{
public:
A()
{
T *pT = (T *) this;
pT->speek();
}
};

class B : public A<B>
{
public:
void speek(……

------解决方案--------------------
楼上的作法,如果B类包含成员,那么当你声明一个A对象 就会出错

C/C++ code

#include <stdio.h>

template <typename T>
class A
{
public:
    A()
    {
        T *pT = (T *) this;
        pT->speek();
    }
};

class B    :    public A<B>
{
public:
    void speek()
    {
        a=11000;
        printf("OK\n");
    }
    //void print() {printf("%d\n",a);}
    int a;
};

int main()
{
    A<B> a;  //崩溃
        B b;     //可以

    return 0;
}

------解决方案--------------------
这个可以做到,使用成员函数指针实现:
class A
{
public:
typedef void (A::*IFunctor)();
virtual ~A() {}
virtual void Invoke() = 0;
}

class B : public A
{
public:
B()
{
m_functor = (IFunctor)&B::Speek();
}

void Invoke()
{
(this->*m_functor)();
}

void Speek()
{
printf("B::Speek() r\n");
}
private:
IFunctor m_functor;
}

调用方法:
A *pObj = new B();
pObj->Invoke(); // 实际执行的是B::Speek()

这里Invoke相当于一个隔离层。你如果想访问B的多个成员函数的话,可用同样的思路实现。