Effective C++ - Inheritance and Object-Oriented Design
前言:OOP面向对象编程(继承,单一继承,多重继承,public/protected/private,virtual/non-virtual,继承的查找规则,virtual函数是最佳选择吗,等等)有哪些坑?
1 确定你的public继承是is-a关系
Make sure public inheritance models “is-a”.
例子:
class Person {
// ...
};
class Student: public Person {
// ...
};
每个学生都是人,但并非每个人都是学生。人的概念比学生更一般化,学生是人的一种特殊形式。
这个论点,只对public
继承才成立。只有当Student以public形式继承Person,C++的行为才如上述描述。private
继承的意义与此完全不同,至于protected
继承,其意义更加困惑。
请记住
public继承意味is-a
。适用于base classes
身上的每一件事情一定适用于derived classes
身上,因为,每一个derived class
对象也都是一个base class
对象。
2 避免遮掩继承而来的名称