请教多态的一个问题
不好意思请教各位高手一个初级的问题:0.3版本手册的31页讲到了怎么用C语言实现多态。有以下几个问题:
/* 抽象类的方法调用*/
void parent_class_vfunc(struct parent class *self, int a)
{
self->vfunc(a);
}
void child_class_init(struct child class* self)
{
struct parent_class* parent;
/* 强制类型转换获得父类指针*/
parent = (struct base_class*) self;
assert(parent != NULL);
/* 设置子类的虚拟函数*/
parent->vfunc = child_class_vfunc;
}
static void child_class_vfunc(struct child_class*self, int a)
{
self->b = a + 10;
}
我想问的是:
当初始化了一个子类,以及提供了子类相关vfunc的具体实现以后。
我们用一个统一的接口parent_class_vfunc(struct parent class *self, int a)进行相关的操作,实际上也就是执行 self->vfunc(a);
但是实际上子类的vfun的具体实现是需要两个参数的(struct child_class*self, int a),而self->vfunc(a)这里面只有一个参数a。
当函数调用的时候参数传递是怎么进行的呢?
是我哪里想的不对么?
请各位高手指教,谢谢?
aaa1982 谢谢指出您的疑问。
这里应该是书中的一个错误,正确的应该是:
struct parent_class
{
int a;
void (*vfunc)(struct parent_class* self, int a);
};
void parent_class_vfunc(struct parent_class *self, int a)
{
assert(self != NULL);
assert(self->vfunc != NULL); // 这里还有一个拼写错误,slef --> self
self->vfunc(self, a);
}
页:
[1]