文章目录
-
- 32. 确定你的public继承塑模出is-a关系(Make sure public inheritance models “is-a”)
- 33. 避免遮挡继承而来的名称(Avoid hiding inherited names)
- 34. 区分接口继承和实现继承(Differentiate between inheritance of interface and inheritance of implementation)
- 35. 考虑virtual函数以外的其它选择(Consider alternatives to virtual functions)
- 36. 绝不重新定义继承而来的non-virtual函数(Never redefine an inherited non-virtual function)
- 37. 绝不重新定义继承而来的缺省参数值(Never redefine a function’s inherited default parameter value)
- 38. 通过复合塑模出has-a或”根据某物实现出”(Model “has-a” or “is-implemented-in-terms-of” through composition)
- 40. 明智而审慎地使用多重继承(Use multiple inheritance judiciously)
32. 确定你的public继承塑模出is-a关系(Make sure public inheritance models “is-a”)
public inheritance(公开继承)意味”is-a”(是一种)的关系。
如果你令class D(“Derived”)以public形式继承class B(“Base”),你便是告诉C++编译器(以及你的代码读者)说,每一个类型为D的对象同时也是一个类型为B的对象,反之不成立。
请记住:”public继承”意味is-a。适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived class对象也都是一个base class对象。
33. 避免遮挡继承而来的名称(Avoid hiding inherited names)
请记住:(1). derived classes内的名称会遮掩base classes内的名称。在public继承下从来没有人希望如此。(2).为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwarding functions)。