<<Effective C++>> 读书笔记6: 继承与面向对象设计

每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。

        Item 32 确保public继承模拟出is-a关系
1. 使用C++进行面向对象编程时唯一最重要的准则就是:public继承意味着”is-a”, 适用于基类的每一件事也适用于派生类;要让这个规则刻骨铭心。
2. 通过“编译器”(在编译时)阻止企鹅飞翔企图的设计代替只在“运行时”检测的设计。
3. 一些适用于矩形(它的宽度可以独立于他的高度而自行变化)的事情不适用于正方形(它的宽度和高度必须相等)。但是public继承断言,适用于基类对象的每一件事也适用于派生类对象;在矩形和正方形的情况下,这个断言失效,所以用public继承模拟它们的关系是完全错误的。
    我想:这里错误的原因是正方形继承了矩形的“宽度可以独立于他的高度而自行变化”,如果正方形继承矩形的“4个角都是90度”就是正确的public继承模拟。
4. is-a关系并不是能存在于两个类之间的唯一关系;另外两个常见的类关系是 "has-a" 和 "is-implemented-in-terms-of"。因为用这些其它重要关系中的一个来不正确地模拟is-a而造成的C++设计错误并不罕见,所以应该确保理解了这些关系之间的不同,并知道在 C++ 中如何才能用它们做最好的模拟。
5. 没有一个适用于所有软件的完美设计;最好的设计依赖于系统究竟期望做什么,无论现在还是未来。

        Item 33 避免覆盖“通过继承得到的名字”
1. 在一个派生类调用基类的一件东西(例如,一个成员函数,一个类型定义,或者一个数据)时,编译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值