公有继承:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * 公有继承
    5. * */
    6. class A{
    7. public:
    8. int x;
    9. void set_z(int i) {
    10. z = i;
    11. }
    12. int get_z() {
    13. return z;
    14. }
    15. protected:
    16. int y;
    17. private:
    18. int z;
    19. };
    20. class B: public A {
    21. public:
    22. int m;
    23. void set_value(int a, int b, int c, int d, int e, int f) {
    24. x = a; // B 中的x为公有
    25. y = b; // B 中的y为保护
    26. set_z(c); // 调用基类的公有成员函数为z赋值
    27. // z = c; // 错误,B 中的z不可访问
    28. m = d;
    29. n = e;
    30. p = f;
    31. }
    32. void display() {
    33. cout<<"x="<<x<<endl; // B 中的x为公有
    34. cout<<"y="<<y<<endl; // B 中的y为保护
    35. // cout<<"z="<<z<<endl; // 错误,B 中的z不可访问
    36. cout<<"z="<<get_z()<<endl; // 调用基类的公有成员函数获得z的值
    37. cout<<"m="<<m<<endl; // 公有
    38. cout<<"n="<<n<<endl; // 保护
    39. cout<<"p="<<p<<endl; // 私有
    40. }
    41. protected:
    42. int n;
    43. private:
    44. int p;
    45. };
    46. int main() {
    47. B obj;
    48. obj.set_value(1, 2, 3, 4, 5, 6);
    49. obj.display();
    50. cout<<"x="<<obj.x<<endl; // B 中的x为公有
    51. // cout<<"y="<<obj.y<<endl; // B 中的y为保护,无法通过对象访问
    52. // cout<<"z="<<obj.z<<endl; // B 中的z不可访问
    53. cout<<"m="<<obj.m<<endl; // 公有
    54. // cout<<"n="<<obj.n<<endl; // 保护,无法通过对象访问
    55. // cout<<"p="<<obj.p<<endl; // 私有
    56. return 0;
    57. }

    私有继承:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * 私有继承
    5. * */
    6. class A{
    7. public:
    8. int x;
    9. void set_z(int i) {
    10. z = i;
    11. }
    12. int get_z() {
    13. return z;
    14. }
    15. protected:
    16. int y;
    17. private:
    18. int z;
    19. };
    20. class B: private A {
    21. public:
    22. int m;
    23. void set_value(int a, int b, int c, int d, int e, int f) {
    24. x = a; // B 中的x为私有
    25. y = b; // B 中的y为私有
    26. set_z(c); //
    27. // z = c; // 错误,B 中的z不可访问
    28. m = d;
    29. n = e;
    30. p = f;
    31. }
    32. void display() {
    33. cout<<"x="<<x<<endl; // B 中的x为私有
    34. cout<<"y="<<y<<endl; // B 中的y为私有
    35. // cout<<"z="<<z<<endl; // 错误,B 中的z不可访问
    36. cout<<"z="<<get_z()<<endl; // 调用基类的公有成员函数获得z的值
    37. cout<<"m="<<m<<endl; // 公有
    38. cout<<"n="<<n<<endl; // 保护
    39. cout<<"p="<<p<<endl; // 私有
    40. }
    41. protected:
    42. int n;
    43. private:
    44. int p;
    45. };
    46. int main() {
    47. B obj;
    48. obj.set_value(1, 2, 3, 4, 5, 6);
    49. obj.display();
    50. // cout<<"x="<<obj.x<<endl; // B 中的x为私有
    51. // cout<<"y="<<obj.y<<endl; // B 中的y为私有
    52. // cout<<"z="<<obj.z<<endl; // B 中的z不可访问
    53. cout<<"m="<<obj.m<<endl; // 公有
    54. // cout<<"n="<<obj.n<<endl; // 保护,无法通过对象访问
    55. // cout<<"p="<<obj.p<<endl; // 私有
    56. return 0;
    57. }

    保护继承:

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. /**
    4. * 保护继承
    5. * */
    6. class A{
    7. public:
    8. int x;
    9. void set_z(int i) {
    10. z = i;
    11. }
    12. int get_z() {
    13. return z;
    14. }
    15. protected:
    16. int y;
    17. private:
    18. int z;
    19. };
    20. class B: private A {
    21. public:
    22. int m;
    23. void set_value(int a, int b, int c, int d, int e, int f) {
    24. x = a; // B 中的x为保护
    25. y = b; // B 中的y为保护
    26. set_z(c); //
    27. // z = c; // 错误,B 中的z不可访问
    28. m = d;
    29. n = e;
    30. p = f;
    31. }
    32. void display() {
    33. cout<<"x="<<x<<endl; // B 中的x为保护
    34. cout<<"y="<<y<<endl; // B 中的y为保护
    35. // cout<<"z="<<z<<endl; // 错误,B 中的z不可访问
    36. cout<<"z="<<get_z()<<endl; // 调用基类的公有成员函数获得z的值
    37. cout<<"m="<<m<<endl; // 公有
    38. cout<<"n="<<n<<endl; // 保护
    39. cout<<"p="<<p<<endl; // 私有
    40. }
    41. protected:
    42. int n;
    43. private:
    44. int p;
    45. };
    46. int main() {
    47. B obj;
    48. obj.set_value(1, 2, 3, 4, 5, 6);
    49. obj.display();
    50. // cout<<"x="<<obj.x<<endl; // B 中的x为保护
    51. // cout<<"y="<<obj.y<<endl; // B 中的y为保护
    52. // cout<<"z="<<obj.z<<endl; // B 中的z不可访问
    53. cout<<"m="<<obj.m<<endl; // 公有
    54. // cout<<"n="<<obj.n<<endl; // 保护,无法通过对象访问
    55. // cout<<"p="<<obj.p<<endl; // 私有
    56. return 0;
    57. }

    运行的结果和私有继承一样

    但是私有继承会中断继承