如果你令classD("Derived")以public形式继承classB("Base"),你便是告诉c++编译器,每个类型为D的对象同时也是一个类型为B的对象,反之不成立。B比D表现出更一般化的概念,而D比B表现出更特殊化的概念。
public继承意味着is-a。适用于base classes身上的每一件事都适用于derived classes身上, 因为每一个derived class对象也是一个base class对象。
class Person{...};
class Student:public Person{...};
void eat(const Person& p); //任何人都会吃
void study(const Student& s); //只有学生才到校学习
Person p; //p是人
Student s; //s是学生
eat(p); //没问题,p是人
eat(s); //没问题,s是学生,而学生也是(is-a)人
study(s); //没问题,s是个学生
study(p); //错误!p不是个学生
存在于两个class之间的关系有:1、“is-a” 2、“has-a” 3、“is-implemented-in-terms-of”