aaa1982 发表于 2010-8-15 23:10:03

请教多态的一个问题

不好意思请教各位高手一个初级的问题:

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

ffxz 发表于 2010-8-16 00:08:26

谢谢指出您的疑问。

这里应该是书中的一个错误,正确的应该是:
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]
查看完整版本: 请教多态的一个问题