C 语言部分实现面向对象的继承特性【重构】

来源:互联网 发布:曾经很火的网络歌曲 编辑:程序博客网 时间:2024/06/05 18:56


之前的一个版本中,在“子类”对象构造时,采用动态对象申请“父类”,然后在内存拷贝到“子类的对象”中,在“子类”的“构造函数”结束后,再让临时“父类”对象“析构”。对于本文中的例子,animal本身是一个纯粹的抽象概念,不应该被实例化,因此animal类更像纯虚基类,仅仅提供接口就可以了,不用对其“实例化”。

下面我对这个例子进行了重构(这里仅仅附上修改的部分,请参考原文):
//animal_base.h:
(Omit unchanged part)

/* 删除初始化函数 */
//animal_t * animal_init();

/* 删除内存释放函数 */
//void animal_die(animal_t *animal);



//animal_base.c

//删除以下函数的实现:
// animal_t * animal_init(){}
// void animal_die(animal_t *animal){}


//cat.c

// 修改cat的初始化函数
cat_t * cat_init()
{
    cat_t* cat = (cat_t *)malloc(sizeof(cat_t));
    animal_t temp_animal;
    temp_animal.animal_ops.eat = eat;
    temp_animal.animal_ops.walk = walk;
    temp_animal.animal_ops.talk = talk;
    cat->base = temp_animal;
    return cat;
}

//dog.c

// 修改dag的初始化函数
dog_t * dog_init()
{
    dog_t *dog = (dog_t *)malloc(sizeof(dog_t));
    animal_t temp_animal;
    temp_animal.animal_ops.eat = eat;
    temp_animal.animal_ops.walk = walk;
    temp_animal.animal_ops.talk = talk;
    dog->base = temp_animal;
    return dog;

题后:
程序员应该“每日三省其身”,对于前一日写的代码,每天早晨抽时间研究一下是否需要重构。写代码应该像计算数学题一样,将其尽可能实现其最优美的公式。谁说程序员是一份“青春饭”,程序员和医生一样,需要大量的经验总结和积累。

0 0
原创粉丝点击