int main(void)
{
RectangleClass r1;
rectangle_new_with_lengths(&r1, 4.f, 5.f);
printf("rectangle r1's area is %f units square\n", shape_computeArea(&r1));
return 0;
}
我希望这至少能给你一些启发。要获得 C 语言中成功且丰富的面向对象框架,请参考 glib 的 GObject库。
还要注意的是,上面并没有对显式的“类”进行建模,每个对象都有自己的方法指针,这比你在 C + + 中找到的方法指针要灵活一些。而且,还要消耗内存。您可以通过将方法指针填充到 class结构中来避免这种情况,并为每个对象实例创建一种引用类的方法。
GTK 完全构建在 C 上,并且使用了许多 OOP 概念。我已经通读了 GTK 的源代码,它非常令人印象深刻,而且绝对更容易阅读。基本概念是,每个“类”只是一个结构和相关的静态函数。静态函数都接受“ instance”结构作为参数,然后执行任何需要的操作,并在必要时返回结果。例如,您可能有一个函数“ GetPosition (Circlestructobj)”。该函数将简单地挖掘 struct,提取位置编号,可能构建一个新的 position tionstruct 对象,将 x 和 y 粘贴到新的 position tionstruct 中,然后返回它。GTK 甚至通过将结构嵌入到 structs 中来实现继承。很聪明。