• C++覆盖和保护成员


    1.覆盖

    派生类可以定义一个和基类成员同名的成员,这叫做覆盖。在派生类中访问这样的的类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符::。

    2.基类和派生类具有同名成员的情况。

    1. class base
    2. {
    3. int j;
    4. public:
    5. int i;
    6. void func();
    7. };
    8. class derived:public base
    9. {
    10. public:
    11. int i;
    12. void access();
    13. void func();
    14. };
    15. void derived::access ()
    16. {
    17. j=5;//error
    18. i=5;//引用的时派生类的i;
    19. base::i=5;//引用的时基类的i
    20. func();//派生类的
    21. base::func();//基类的
    22. }
    23. int main()
    24. {
    25. derived obj
    26. obj.i=1;
    27. obj.base::i=1;
    28. }

    一般情况下,派生类定义和基类同名的变量是愚蠢的,但是定义同名的函数却可以存在。
    如果定义了同名的变量,那么基类的变量会在派生类的变量的前边。

    3.另一种存取权限说明符:protected(保护成员)

    (1)基类的private成员:可以被以下函数访问
    –基类的成员函数
    –基类的友元函数
    (2)基类的public成员:可以被以下函数访问
    –基类的成员函数
    –基类道德友元函数
    –派生类的成员函数
    –派生类的友元函数
    –其他函数
    (3)基类的protected成员:可以被以下函数访问
    –基类的成员函数
    –基类的与友元函数
    –派生类的成员函数可以访问当前对象的基类的保护成员
    举例子:

    1. class father
    2. {
    3. private:int nprivate:
    4. public:int npublic;
    5. protected:int nprotected;
    6. };
    7. class son:public father
    8. {
    9. void accessfather(){
    10. npublic=1; //ok
    11. nprivate=1;//wrong
    12. nprotected=1;//ok,访问从基类继承的protedted成员
    13. son f;
    14. f.nprotedted=1;//wrong,f不是当前对象
    15. }
    16. };
    17. int main()
    18. {
    19. father f;
    20. son s;
    21. f.npublic=1;//ok
    22. s.npublic=1;//ok
    23. f.nprotedted=1;//error
    24. f.nprivate=1;//error
    25. s.nprotected=1;//error
    26. s.nprivate=1;//error
    27. return 0;
    28. }

      今天的内容就讲到这里了! 

  • 相关阅读:
    宇视高空抛物相机配置指导
    【Java编程】JavaSE基础总结(一)
    Java8 stream 流
    BSP Day55
    云开发静态网站H5跳转小程序(记录过程)以及云环境共享(同一主体)
    vue实现调用手机拍照、录像功能
    2022年12月英语六级预测范文—预测范文:Be Willing To Try
    【Codeforces】Educational Codeforces Round 156 [Rated for Div. 2]
    JavaScript代码在网页的使用方式及注意事项
    R语言作业wine 数据
  • 原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127871433