【发布时间】:2012-03-21 00:17:02
【问题描述】:
编辑:
我没有更新问题,在这样做的同时我意识到问题的范围已经完全改变,所以我对此表示歉意。我正在处理线程,因此必须存在静态函数。我试图尽可能地从问题中抽象出 Threading 的东西。
我收到pure virtual function call 错误,所以我想我的实现可能有误。这是我所拥有的:
class Base
{
protected:
virtual int f(void) = 0;
static void baseFunction(void* param);
};
static void Base::baseFunction (void* param)
{
Base *parent = (Base*) parameter;
int i = parent->f();
}
class Derived : public Base
{
private:
int _memeber;
int f(void);
};
int Derived::f(void)
{
_member = 0;
cout << "Derived _memeber is: " << _member << endl;
return 0;
}
void main ()
{
Derived d;
d.baseFunction(d);
}
我需要函数Derived::f(void) 才能访问Derived 类成员。
【问题讨论】:
-
这是实际代码吗?任何一个类的定义后面都没有分号。
-
另外,定义应该是
int Derived::f(void)。但是你什么时候得到错误?它是编译器还是运行时错误?你确定你打电话给Derived吗? -
代码原样(以 hmjd 的注释为模)很好。应该还有什么问题。
-
您在哪里使用
Derived对象?您是否将其按值传递给期望Base的函数?如果是这样,它将被切片,并且虚拟函数在运行时将不存在。 -
@PeterWood:不能切片——纯虚函数会阻止基类的实例化。
标签: c++ oop polymorphism virtual