发布时间:2013-01-11 18:52:54
明智审慎使用private继承,通常只在表示“实现”关系时,相当于表现出C++中没有的interface的作用。private继承后,需要在派生类中重声明(redeclare)所需的对外接口(为了实现,using一下或使用::域作用符调用基类版本)。再强调:public继承,表示派生类 is-a 基类,可以替换基类出现的地方(里氏替换)。空白基类最优化: 空的类取sizeof,值是1,但是由其派生的类,这个“垫补”的1可以减掉。 点击(此处)折叠或打开class a{};class b:public a{ int t2;};类a的sizeof是1,......【阅读全文】
发布时间:2013-01-11 18:01:19
组合与实现。前面某个item已经提过public继承是一种“is-a”的关系。组合不用说了,某些场景应用非常多见,“has-a”的关系。实现可以参考STL中的Stack,由deque实现出的,大致就是这么个意思。总之,采用“is-a”关系建模要慎重。......【阅读全文】
发布时间:2013-01-11 17:22:09
虚函数的调用是动态绑定,但是默认参数却是静态绑定的,设计时要考虑到派生类的应用。不要在派生类中修改默认参数了,引入风险和重复代码。CPP Primer里面有讲过这个,还记得。PS:说参数采用动态绑定的话,编译器会增加很多开销,图省事变静态的了。......【阅读全文】
发布时间:2013-01-11 12:14:54
不要在派生类中redefine基类中的非虚函数,埋下风险。非虚函数表派生类和基类对象共性的东西,要想体现差异化请使用虚函数。......【阅读全文】
发布时间:2013-01-11 12:04:43
考虑虚函数意外的其它实现(模式),通常虚函数都是对外接口,借由多态,触发动态绑定。提供了几种其它思路:1.None-Virtual-Interface(NVI),提供统一的非虚函数作为接口,虚函数或private不对外呈现,具体由子类实现。就是设计模式中的template method,设计好对外的主干,枝叶则面对不同场景待定。2.由函数指针实现strategy模式,这个应用就很普遍了,无论是做入参还是类内部成员。还提到了tr1中的function和bind,以后再好好看看。......【阅读全文】