似乎在ex19中无效*自我学习C艰难的方式没有被称为

时间:2014-09-09 09:35:15

标签: c oop

我一直在练习练习C的艰难之路3天,我真的没有得到它。如果没有在main函数中调用它,为什么你需要void * self:

int Monster_attack(void *self, int damage)
{
   Monster *monster = self;
   printf("You attack %s!\n", monster->_(description));
   etc....
   etc....
}

在所有文件中我都没有看到它在main函数中被调用我只看到

Map *game = NEW(Map, "The Hall of the Minotaur.");

自我指针在声明后会自动获取对象吗? 例如:

Object object;

在实现里面,函数指针会自动执行此操作吗?

int Monster_attack(object, some_integer);

源代码为here

我对我的语法感到抱歉,因为英语不是我的母语,我希望它足够清楚。

1 个答案:

答案 0 :(得分:3)

他们正在使用void*来模拟对象。

在C ++中,您将attack()声明为类Monster的成员函数,然后将其调用为:myMonster.attack(damage);

在C中,由于我们没有类,因此它们通过使用额外的参数来传递对包含对象状态的结构的引用来模拟类: Monster_attack(myMonster, damage);

所以void *self是一个指向结构的指针,该结构包含相应类型的对象(struct)的成员变量。

为了使成员函数易于识别,他们使用命名约定<class>_<function>(void* self, ...)