条款 32 :确定你的public继承塑膜出is-a关系

条款 32 :确定你的public继承塑膜出is-a关系

Make sure public inheritance models "is-a"

  1. public inheritance意味着"is-a"(是一种)的关系。如果B:😄,则在任何需要B的地方,D一样可以排上用场。但是需要D的地方,B不见得有用。例如所有学生都是人,人能干的事,学生一定能干,但学生有的属性不是人人都会有。

    void eat(const Person& p);//任何人都会吃
    void study(const Student& s);//学生才到校学习
    Person p;
    Student s;
    eat(p);//没问题,p是人
    eat(s);//没问题,student is a person
    study(p);//错误,学生才去学习
    study(s);//没错,s是学生
    
  2. 乍一看,public继承是is a的关系很简单。但是有时候,你的直觉会欺骗你。例如你觉得:企鹅是一种鸟,也就是企鹅应该是鸟的public继承,但是鸟会飞,企鹅会飞吗?这里是由于语言不严谨造成的,应当有这么一个认知:不是所有鸟都会飞。所以当我们编写继承类时应该在鸟类中放入fly的虚函数,而在企鹅类中对fly不予实现。这样更能反应出真实的继承关系。再例如正方形应该继承长方形,毕竟从小学我们就知道,正方形是特殊的矩形。但是我们该仔细思考一下,长方形有长宽两个属性,我们对其都可以改变,而正方形只有边长这么一个属性,我们总不能设置两条边,可以向长方形一样对其其中一个随意修改,那就不是正方形了哇。因为我们说正方形is a 矩形,看似合理。但是我们应当更加仔细的考察其是不是不够严谨。

请记住

"public继承"意味is-a.适用于base-clases身上的每一件事也一定适用于derived classes身上,因为每一个derived classes对象也都是一个base class对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值