printf("狗在地上跑!\n");
}
/* 初始化狗的昵称和年龄 */
void Dog_init(Dog* t, const char* name, int age)
{
Animal* animal = SUPER_PTR(t, Animal);
animal->setName(animal, name);
animal->setAge(animal, age);
}
CTOR(Dog)
SUPER_CTOR(Animal);
FUNCTION_SETTING(Animal.eat, Dog_eat);
FUNCTION_SETTING(Animal.breathe, Dog_breathe);
FUNCTION_SETTING(IMoveable.move, Dog_move);
FUNCTION_SETTING(init, Dog_init);
END_CTOR
细心的朋友可能已经注意到了,这里又有一个陌生的宏:SUPER_CTOR 未介绍。这个
宏是提供给子类用的,用于调用其直接父类的构造函数(类似 Java 语言中的 super()调用,
在这里,其实质是要先调用父类的函数绑定过程,再调用自身的函数绑定过程),类似
Java 那样,SUPER_CTOR 如果要出现,需要是 ABS_CTOR 或者 CTOR 下面紧跟的第一条
语句。
最后,我们把 Car 类也实现了:
void Car_move(IMoveable* t)
{
printf("汽车在开动!\n");
}
CTOR(Car)
FUNCTION_SETTING(IMoveable.move, Car_move);
END_CTOR
下面,我们实现 main 方法,以展示 LW_OOPC 的威力:
#include "animal.h"
int main()
{
Fish* fish = Fish_new(); // 创建鱼对象
Dog* dog = Dog_new(); // 创建狗对象
Car* car = Car_new(); // 创建车子对象
Animal* animals[2] = { 0 }; // 初始化动物容器(这里是Animal指针数组)
IMoveable* moveObjs[3] = { 0 }; // 初始化可移动物体容器(这里是IMoveable指针数
组)