• 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. }

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

  • 相关阅读:
    mulesoft Module 5 quiz 解析
    编程时遇到的Python语法问题汇总
    CrossOver 22Mac和Linux免费中文版系统兼容工具
    关于Matlab与Python中日期转时间戳不一致的问题
    【MongoDB】索引 - 复合索引
    CentOS 7 制作openssl 1.1.1w 版本rpm包 —— 筑梦之路
    汉语史稿重点
    Java中的异步日志记录与性能优化
    Vue中的基础指令
    Maven首次安装配置
  • 原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127871433