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

9 篇文章 0 订阅


之前的一个版本中,在“子类”对象构造时,采用动态对象申请“父类”,然后在内存拷贝到“子类的对象”中,在“子类”的“构造函数”结束后,再让临时“父类”对象“析构”。对于本文中的例子, 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;

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值