编程交流与学习--Effective C++学习之"继承和面向对象设计"

本文探讨了C++面向对象编程的重要原则,包括正确使用继承、区分接口与实现继承、避免重新定义非虚函数及缺省参数值等,并讨论了私有继承与多继承的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 继承和面向对象设计
条款35: 使公有继承体现 "是一个" 的含义

原因:“C++面向对象编程中一条重要的规则是:公有继承意味着 "是一个"
条款36: 区分接口继承和实现继承

原因:“定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口。”“声明简单虚函数的目的在于,使派生类继承函数的接口和缺省实现。”“声明非虚函数的目的在于,使派生类继承函数的接口和强制性实现。”作者再次强调虚函数消耗只在20%的情况下对程序造成巨大影响,其它情况带来的好处会大于消耗。
条款37: 决不要重新定义继承而来的非虚函数

原因:“如果写类D时重新定义了从类B继承而来的非虚函数mfD的对象就可能表现出精神分裂症般的异常行为。”
条款38: 决不要重新定义继承而来的缺省参数值

原因:“如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。
条款39: 避免 "向下转换" 继承层次

原因:“因为向下转换难看、容易导致错误,而且使得代码难于理解、升级和维护”。“"向下转换" 可以通过几种方法来消除。最好的方法是将这种转换用虚函数调用来代替,第二个方法是加强类型约束,使得指针的声明类型和你所知道的真的指针类型之间没有出入。安全的向下转换”
条款40: 通过分层来体现 "有一个" "...来实现"

原因:“使某个类的对象成为另一个类的数据成员,从而实现将一个类构筑在另一个类之上,这一过程称为 "分层"(Layering)
条款41: 区分继承和模板

原因:“类型T影响类的行为吗?如果T不影响行为,你可以使用模板。如果T影响行为,你就需要虚函数,从而要使用继承。
条款42: 明智地使用私有继承

原因:“私有继承意味着 "...来实现"
条款43: 明智地使用多继承

原因:“MI的出现就象打开了潘朵拉的盒子,带来了单继承中绝对不会存在的复杂性
条款44: 说你想说的;理解你所说的 

原因:想表达的就是所表达的,所表达的就是想表达的。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值