zoukankan      html  css  js  c++  java
  • 子类继承基类的三种继承方式

    在C++中,子类继承父类有三种继承方式,分别是:public, protected和private。子类继承的方式不同,那么子类对象访问父类中的参数访问权限也不同。

    public 方式继承:基类的private成员派生类不可见,基类中的protected和public成员在派生类中可以直接使用,并且变成了派生类中相应                        的protected成员和public成员,但是只有public成员可以在派生类外使用。

    protected 方式继承:基类的private成员派生类不可见,基类的protected成员和public成员变成派生类的protected成员,这时在派生类                             外不能使用基类的所有成员,包括public成员。 

    private 方式继承:基类的private成员仍然为私有的,派生类不可见,基类中的protected成员和public成员成为了派生类中的private成                            员,在派生类外不能使用基类中的任何成员。

    下面我们通过例子来解释上面的说法:

    class A
    {
      public:
        int m_public; 
      protected:
        int m_protected;
      private:
        int m_private;
    };
    
    class B :public A
    {
       void SetPublic(int nPublic)
       {
           m_public = nPublic;     //在派生类B中可以使用基类A中的public类型
       }
       void SetProtected(int nProtected)
       {
           m_protected = nProtected;     //在派生类B中可以使用基类A中的protected类型
       }
       void SetPrivate(int nPrivate)
       {
           m_private = nPrivate;       //错误,因为基类的private成员不能用
       }
    };
    
    B b;                  //创建B类的对象c
    b.m_public = 100;     //正确
    b.m_protected = 100;  //错误,public继承中基类的protected在派生类中是protected
    b.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了
    
    
    class C :protected A
    {
       void SetPublic(int nPublic)
       {
           m_public = nPublic;       //在派生类C中可以使用基类A中的public类型
       }
       void SetProtected(int nProtected)
       {
           m_protected = nProtected;  //在派生类C中可以使用基类A中的protected类型
       }
       void SetPrivate(int nPrivate)
       {
           m_private = nPrivate;       //错误,因为基类的private成员不能用
       }
    };
    
    C c;                  //创建C类的对象c
    c.m_public = 100;     //错误,protected继承C类里变成了protected成员
    c.m_protected = 100;  //错误,protected继承C类里还是protected成员
    c.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了
    
    
    class D :private A
    {
       void SetPublic(int nPublic)
       {
           m_public = nPublic;     //在派生类D中可以使用基类A中的public类型
       }
       void SetProtected(int nProtected)
       {
           m_protected = nProtected;  //在派生类D中可以使用基类A中的protected类型
       }
       void SetPrivate(int nPrivate)
       {
           m_private = nPrivate;       //错误,因为基类的private成员不能用
       }
    };
    
    D d;                  //创建D类的对象d
    d.m_public = 100;     //错误,private继承D类里变成了private成员
    d.m_protected = 100;  //错误,private继承D类里变成了private成员
    d.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了
    

      

  • 相关阅读:
    查看windows下指定的端口是否开放
    网易云音乐评论爬虫:爬取歌曲的全部评论
    用 Python 玩转 GitHub 的贡献板
    用python实现linux口令破解
    Python 音频数据扩充的技巧
    教你使用python+Opencv完成人脸解锁
    opencv+Python特征检测及K-最近邻匹配
    opencv+python 统计及绘制直方图
    学会用这个工具做分析,1年积累3年工作经验
    15分钟,教你用Python爬网站数据,并用BI可视化分析!
  • 原文地址:https://www.cnblogs.com/pengjun-shanghai/p/5545274.html
Copyright © 2011-2022 走看看