C++三则:如无必要,勿增虚函数

  一、如无必要,勿增虚函数

  比如我们有以下关于球的类层次设计 ,其中需要判断某种球是否是可以踢的(kickable):


  乍一看觉得挺合理的,但仔细想想,其实IsKickable是某种球的本质静态属性,用一个虚函数来表示这种信息,是一种浪费,更加合理的方式应该是用一个数据成员和一个普通成员函数:


  类似这样的设计我碰到过至少两次,一次是被review,一次是review,结果都是改成了第二种我们认为比较合理的方式。

  二、不要用 "||" 做复杂的逻辑判断

  "||"是"或运算"符号,当你确实将其作为或运算时,的确很简单明了。但是有人发明了一种比较tricky的方法来使用它。

  举个例子,我们的程序可能有三种状态:A, B,或者C,现在有一个变量bOk,如果程序当前状态为C的话,bOk必须为true,如何来assert?一般比较直观的做法是:


  但是有人觉得有个if判断比较麻烦,于是发明了:

  逻辑理解为:如果不是A也不是B,那么bOk必须为true。虽然代码简化成只有单个语句,但是,这对理解却带来了挑战。

  我们一般不推荐用这种不直观的方式来做判断。

  三、纯虚函数与默认实现

  有一个基类,我们期望它是一个抽象类,但同时我们又期望其虚函数都有默认实现。这其实一个语法层面的问题:我们是可以把一个虚函数设为纯虚的同时提供默认实现的。(但一开始以为不行,想去把构造函数设为pretected来达到类似的效果,但这样从概念上来讲就不是很合理了)

  对于这种情况,我想也没必要把所有函数设为纯虚,找一个典型,如把析构函数设为纯虚并提供默认实现:


  这样,基类就已经是一个抽象类了,应该是一个可以接受的方案。

时间: 2024-10-27 23:08:10

C++三则:如无必要,勿增虚函数的相关文章

告别无止境的增删改查--Java代码生成器

转自:http://www.cnblogs.com/zhuYears/archive/2012/02/29/2373491.html 告别无止境的增删改查--Java代码生成器   有感于马上要做个比较大的业务系统,想到那无止境的增删改查.粘贴复制,顿时脑后升起一阵凉风.于是想到个找或者写一个Java代码的生成器,这样在正常开发进度下,也能余下更多的时间去做些别的事情. 闲话少说,首先总结下需求: 我需要的这个工具能够读取数据库表结构,通过对字段类型.名称等分析得到需要的各种变量,根据模板生成相

首批三季报出炉乐视网净利增逾七成

新快报记者 陈永洲 黎华联 昨日晚间,两市首批三季报先后披露,乐视(微博)网.歌尔声学.华昌化工分别实现前三季度净利润 同比增长73%.82%及191%(扭亏增幅).截至昨日收盘,乐视网逆市大涨4.75%,报收于23.15元:歌尔声学涨1.13%,报收于23.25元:华昌化工停牌前报10.28元. 乐视网:景顺系逾亿元建仓未赚 三季报显示,乐视网前三季度实现净利润0.87亿元,同比增73%.公司表示,期内业绩增长的主要原因是国家进一步加强 版权保护力度,改善网络视频行业环境,网络视频行业发展规模

基于avd7181c解决视频输入效果差的问题<三>---CVBS无色彩疑难调试手记

基于avd7181c解决视频输入效果差的问题<三>---CVBS无色彩疑难调试手记            笔者在前两篇文章中讲述了基于AVD7181C来解决平台视频输入效果差的问题大概解决方案以及遇到的IIC兼容性问题的解决方法,在本文中将继续解释笔者在调试AVD7181C CVBS输入信号的情况下遇到的没有色彩的问题.笔者经过逐步的验证.推敲终于解决了这个问题,现将过程大概介绍一下.         通过前面的努力,CSI的数据通道已经打通,通过camera APK可以看到YPBPR\CVB

农行前三季净利701亿同比增29.53%

网易财经10月27日讯 农业银行公告称,该行前三季实现归属于股东的净利润为701.46亿元, 同比增长29.53%:基本每股收益0.25元,同比增长14.29%:加权平均净资产收益率23.47%,同比下降2.33个百分点:每股净资产1.63元,较年初增长23.48%. 截至今年9月底,农行总资产101171.22亿元,较年初增长13.90%,首次突破10万亿元大关:发放贷款和垫款净额46196.51亿元,较年初增6402.64亿元,增幅为15.16%:吸收存款86643.48亿元,较年初增加11

全球半导体 20 强:台积电第三、联发科营收跳增近三成

半导体研究机构 IC Insights 15 日公布 2016 全球前二十大芯片厂预估营收排名,其中美国有 8 家半导体厂入榜,日本.欧洲与中国台湾地区各有 3 家,韩国则有两家挤进榜. 英特尔今年预估营收将来到 563.13 亿美元,较 2015 年成长 8%,依旧稳居半导体业龙头.排名第二的三星,营收预估成长 4% 至 435.35 亿美元,与英特尔的差距拉大至 29.4%. 台积电预估营收将成长 11%,成为 293.24 亿美元,成长幅度为前五大厂之首.高通.博通分居第四与第五名,预估营

[闲话三] 收入过万者勿进:个人网站,你想赚多少(1)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 如果你的个人站月收入过万本篇对你已经没有意义,关于商业站点的规划我会在以后写到,如果你的站点收入在0-9000元/月,我建议您仔细看完全文. 个人站点的赢利是个让很多站长头疼的问题,一开始没流量愁,有了流量没钱赚还愁,赚了点钱却看不到将来的发展方向更愁.为了把这个东西写的好一点,看来今晚要多泡两杯咖啡了.今天的心情不错,公司明天放假,

浦发银行前三季净利148亿同比增64%

网易财经10月28日讯 浦发银行发布今年1-9月业绩报告,该行前三季实现归属于上市公司股东的净利润为148.37亿元, 同比增长64.03%:基本每股收益1.293元,同比增长46.92%:全面摊薄净资产收益率18.18%,同比上升1.65个百分点. 截至9月底,浦发银行总资产为19757.18亿元,逼近2万亿大关,较年初增长21.75%:净资产816.01亿元,较年初增长20.08%:每股净资产7.109元,较年初下滑7.63%. 报告显示,9月底,浦发银行存款总额15337.54亿元,较年初

兴业银行前三季净利136亿同比增42%

网易财经10月29日讯 兴业银行今日公布三季报,该行今年前三季实现归属于股东的净利润为135.95亿元, 同比增长42.03%:基本每股收益2.45元,同比增长36.25%:加权平均净资产收益率19.18%,同比提高0.97个百分点:每股净资产14.84元,较年初增长24.47%. 报告显示,兴业银行第三季度实现净利润48.31亿元,为历年来单季最高记录. 对于业绩的快速增长,兴业银行解释称,这是因为该行各项业务持续又好又快发展,资产总额增长较快,净息差同比提高:灵活配置资产:中间业务收入快速增

若无必要 勿增实体

在日常的设计中,经常会有产品经理这样说,"你看这边这么空,我们不如放点引导性的图文呗" 这时设计师估计要抓狂了,- 这简单的流程为什么要搞这么复杂. 让我们分析下 不难得出,在增加流程以外的内容,势必会对用户操作进行干扰,降低表单填写效率,并且会导致无法预期的后果(用户关闭页面) 如何判断: 在功能性页面,我们需要知道在这个页面用户行为是什么;流程内的引导尽量弱化于主流程;流程外的内容,没有必要不要增加 设计法则: 奥卡姆剃刀 不必要的元素会导致设计效率的降低,并且会增加不可预期的后果