发布时间:2013-01-11 12:04:43
考虑虚函数意外的其它实现(模式),通常虚函数都是对外接口,借由多态,触发动态绑定。提供了几种其它思路:1.None-Virtual-Interface(NVI),提供统一的非虚函数作为接口,虚函数或private不对外呈现,具体由子类实现。就是设计模式中的template method,设计好对外的主干,枝叶则面对不同场景待定。2.由函数指针实现strategy模式,这个应用就很普遍了,无论是做入参还是类内部成员。还提到了tr1中的function和bind,以后再好好看看。......【阅读全文】
发布时间:2013-01-11 11:29:32
区分接口继承与实现继承。pure virutal func:接口继承,强制派生类给出自己的实现。impure virutal func:接口继承,并给出默认的实现。none virtual func:接口继承+强制的实现继承。谨小慎微的对待继承设计,尽量重用,避免重复。......【阅读全文】
发布时间:2013-01-11 09:57:53
public派生,派生类和基类之间就是一种“is-a”关系,参照里氏替换原则,基类出现的地方可用派生类替换。派生类对象也是一个基类对象,反之非也。设计好基类接口是否virtual,非virtual即接口与实现都进行派生,反之则只派生对外接口。剩下2种OO关系是 “has-a”和“is-implemented-in-term-of”,总体感觉吐糟了CPP中没有纯粹的interface,否则可以封装抽象的更好。......【阅读全文】
发布时间:2013-01-10 21:59:38
降低文件间编译的依赖度。以防改个不对外的私有成员却导致包含其头文件的n多文件重编译。这个可是尼玛深有体会啊。。。。一种是采用pimpl(pointer to implementaion),前面哪个item大概写过。另一种用抽象类多态,只需抽象类的声明。还建议对头文件分类,有专门前向声明的,有对内部实现的等等。......【阅读全文】
发布时间:2013-01-10 20:33:07
inline只是程序员向编译器提出的一个请求,编译器会根据自身的判断来决定是否对目标函数进行inline处理。inline建议只针对短小且调用频繁的函数,最好这个函数不会被频繁修改,否则包含了这个头文件的源文件都需要重新进行编译构建。慎用inline,它给调试带来了困难。......【阅读全文】