当前位置:   article > 正文

C++继承与派生访问权限_在main函数中能否用b1.i,b1.j和b1.k引用派生类b对象b1中基类a的成员?(2)派生类b

在main函数中能否用b1.i,b1.j和b1.k引用派生类b对象b1中基类a的成员?(2)派生类b中

观察下边一段代码:

  1. class A{
  2. public:
  3. void f1(){}
  4. int i;
  5. protected:
  6. void f2(){}
  7. int j;
  8. private:
  9. int k;
  10. };
  11. class B:public A{
  12. public:
  13. void f3(){}
  14. protected:
  15. int m;
  16. private:
  17. int n;
  18. };
  19. class C:public B{
  20. public:
  21. void f4(){}
  22. private:
  23. int p;
  24. };

全是公用继承,思考这样几个问题:

1.在main函数中能否用b1.i,b1.j和b1.k引用派生类B对象b1中基类A的成员

2.派生类B中成员函数能否调用基类中的成员函数f1和f2.

3.派生类B中成员函数能否调用基类中的数据成员i,j,k.

4.能否在main函数中用c1.i,c1.j,c1.k,c1.m.cl.n,c1.p引用基类A的成员i,j,k,派生类B的成员m,n以及派生类C的成员p

5.能否在main函数中用c1.f1(),c1.f2(),c1.f3()和c1.f4()调用f1,f2,f3,f4c成员函数.

6.派生类C的成员函数f4能否调用基类A中的成员函数f1,f2和派生类中的成员函数f3.

答案在代码中,思考几分钟再看.


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. class A {
  4. public:
  5. void f1(){}//空函数得写括号
  6. int i;
  7. protected:
  8. void f2(){}//空函数得写括号
  9. int j;
  10. private:
  11. int k;
  12. };
  13. class B:public A {
  14. public:
  15. void f3() {
  16. //f1();
  17. // f2();f1在B类中是公有,f2是保护,可以直接在其派生类中调用
  18. // i = 1;//可以
  19. // j = 1;//可以
  20. // k = 1; //可以
  21. }
  22. protected:
  23. int m;
  24. private:
  25. int n;
  26. };
  27. class C:public B {
  28. public:
  29. void f4(){
  30. f1();//可以
  31. f2();//可以
  32. }
  33. private:
  34. int p;
  35. };
  36. int main() {
  37. A a1;
  38. B b1;
  39. C c1;
  40. b1.i; //可以访问;
  41. //b1.j; //不可以访问,j是由通过公有继承基类来的,j在 基类中的权限是保护,在派生类中也是保护,类外不能访问被保护的数据成员。
  42. //b1.k;//k同理;
  43. // c1.j; //不可以
  44. // c1.f1();//可以
  45. c1.f3();//可以
  46. c1.f4();//可以
  47. // c1.f2(); //不可以f2是保护成员
  48. c1.i;//可以
  49. // c1.j;//不可以
  50. // c1.k;//不可以
  51. // c1.n;//不可以
  52. // c1.m; //不可以
  53. return 0;
  54. }




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/106099
推荐阅读
  

闽ICP备14008679号