怎么在基类里调用派生类的函数。
[code=C/C++][/code]
class A
{
};
class B:public A
{
public:
void speek();
};
能够用A调用speak()吗?
[解决办法]
强制转换可以办到
[解决办法]
我可以明确的告诉你,这是可以的!
[解决办法]
- C/C++ code
//用virtual 关键字
[解决办法]
[解决办法]
楼上的作法,如果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的多个成员函数的话,可用同样的思路实现。