发布时间:2013-01-11 21:16:59
多重继承的使用要小心,可能涉及到virtual base和virtual继承,如果virtual base中不含有任何的数据成员,可以省去初始化等很多易错的工作(virtual base要由最终派生类直接初始化)。有用的场景是:public继承一个interface class,private继承一个辅助实现的class,结合使用。......【阅读全文】
发布时间: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基类中的非虚函数,埋下风险。非虚函数表派生类和基类对象共性的东西,要想体现差异化请使用虚函数。......【阅读全文】