其实,protected和private派生后的派生类不是基类的子类,因为此派生类不能做基类所能做的所有事情。我们看看下面的代码
  #include <iostream> 
  class Person { 
  public: 
  Person(){}; 
  void eat() {std::cout << "eat ";} 
  }; 
  //公有继承 
  class PublicStudent : public Person { 
  public: 
  PublicStudent() {} 
  void study() {std::cout << "study ";} 
  }; 
  //保护继承 
  class ProtectedStudent : protected Person { 
  public: 
  ProtectedStudent() {} 
  void study() {std::cout << "study ";} 
  }; 
  //私有继承 
  class PrivateStudent : private Person { 
  public: 
  PrivateStudent() {} 
  void study() {std::cout << "study ";} 
  }; 
  void func_test(Person &p) { 
  p.eat(); 
  } 
  int main() { 
  PublicStudent public_s; 
  ProtectedStudent protected_s; 
  PrivateStudent private_s; 
  func_test(public_s);                    //正确,公有继承时,派生类可以做基类的所有事情 
  func_test(protected_s);                 //出错,保护继承时,派生类不能做基类的所有事情 
  func_test(private_s);                   //出错,私有继承时,派生类不可以做基类的所有事情 
  system("pause"); 
  return 0; 
  } 
  func_test()需要一个Person类型的对象,在调用func_test(public_s)时实际传递的是PublicStudent对象,因为PublicStudent共有继承Person类,所以PublicStudent对象可以使用Person类中所有的公有成员,也是说基类对象可以做的事,公有继承的派生类对象照样可以做。而ProtectedStudent和PrivateStudent都是非公有有继承,他们的对象不可以直接访问Person类的成员。但是在他们派生类的对象空间中是包含基类的的对象,只是无法让他们公开访问。从上面的代码可以看出来,protected继承和private继承的派生类已经不是基类的子类了。