原文: https://www.programiz.com/cpp-programming/public-protected-private-inheritance

在本文中,您将学习在 C++ 中使用公共,保护和私有继承。 您将通过示例学习在何处以及如何使用它。

您可以从具有不同访问控制的基类中声明派生的,即公共继承,受保护的继承或私有继承。

  1. #include <iostream>
  2. using namespace std;
  3. class base
  4. {
  5. .... ... ....
  6. };
  7. class derived : access_specifier base
  8. {
  9. .... ... ....
  10. };

注意:可以使用publicprotectedprivate关键字代替上述中使用的access_specifier术语。

C++ 中的公共继承,保护继承和私有继承的示例

  1. class base
  2. {
  3. public:
  4. int x;
  5. protected:
  6. int y;
  7. private:
  8. int z;
  9. };
  10. class publicDerived: public base
  11. {
  12. // x is public
  13. // y is protected
  14. // z is not accessible from publicDerived
  15. };
  16. class protectedDerived: protected base
  17. {
  18. // x is protected
  19. // y is protected
  20. // z is not accessible from protectedDerived
  21. };
  22. class privateDerived: private base
  23. {
  24. // x is private
  25. // y is private
  26. // z is not accessible from privateDerived
  27. }

在上面的示例中,我们观察到以下内容:

  • base具有三个成员变量:xyz,它们分别是publicprotectedprivate成员。
  • publicDerived继承了变量xy为公共变量和受保护变量。z不是继承的,因为它是base的私有成员变量。
  • protectedDerived继承变量xy。 这两个变量都被保护。z不继承
    如果我们从protectedDerived派生一个类derivedFromProtectedDerived,则变量xy也将继承到派生类。
  • privateDerived继承变量xy。 这两个变量都变为私有。z不继承
    如果我们从privateDerived派生类derivedFromPrivateDerived,则变量xy不被继承,因为它们是privateDerived的私有变量。

公共继承中的可见性

访问性 私有变量 受保护变量 公共变量
可从自己的类访问?
可从派生类访问?
可从二阶派生类访问?

受保护继承中的可见性

访问性 私有变量 受保护变量 公共变量
可从自己的类访问?
可从派生类访问? 是(继承为受保护的变量)
可从二阶派生类访问?

私有继承中的可见性

访问性 私有变量 受保护变量 公共变量
可从自己的类访问?
可从派生类访问? 是(继承为私有变量) 是(继承为私有变量)
可从二阶派生类访问?