C++ 继承中的公有与私有访问权限

 

  经过前面的学习,我们可以知道在继承定义的过程,在“基类”的前面需要设置(public)公有或设置(private)私有,来确定继承的访问权限。

 

  首先,我们介绍一下公有的继承访问权限,它的关键字是public

 

 (1)通过公有权限设置的继承,其“基类”中公有的属性与方法,都可以在继承的类中或类外访问。

 

 (2)通过公有权限设置的继承,其“基类”中私有的属性与方法,不可以在继承的类中或类外访问。

 

 

 

 

 

  接下来,我们就结合例子来作进一步的说明

 

例子1:

Class  DongWu   //动物类

{

  private:

    int Leg;  //腿

    int Tail;  //尾

    int  x;    //移动的距离

    void Attack(); //攻击的方法

  public:

    int head; //头

    int body;  //身

    DongWu() //构造函数

    {

     head = 1;

     body = 1;

     Leg = 4;

     Tail = 1;

    }

    void MX(); //移动的方法

};

 

void Dongwu::MX()

{

   x=x+1;  //MX是类中的方法,可以防问私有属性x

   body = 1;  //MX是类中的方法,可以防问公有属性body

   Attack(); //Attack是私有的方法,但可以在类中的方法中调用

}

 

void Dongwu::Attack()

{

   x=x+1;  //Attack是类中的方法,可以防问私有属性x

   body = 1;  //Attack是类中的方法,可以防问公有属性body

}

 

 

//犀牛类

Class  XiNiu :public  DongWu  //犀牛类通过公有权限public继承动物类DongWu

{

  public:

    int  Jiao; //角

    XiNiu()

    {

     head = 0;  //正确,head在动物类中的访问权限是公有,所以,可在继承的类XiNiu中访问

     body = 1;  //正确,body在动物类中的访问权限是公有,所以,可在继承的类XiNiu中访问

     Leg = 4;   //错误,Leg在动物类中的访问权限是私有,所以,不可在继承的类XiNiu中访问

     Tail = 1;   //错误,Tail在动物类中的访问权限是私有,所以,不可在继承的类XiNiu中访问

    }

};

 

 

 

XiNiu  X1;    //定义一只犀牛对象

X1.head = 1; //正确,head属性是公有访问权限,所以,可以在继承以后,在类外通过犀牛对象访问

X1.MX();   //正确,方法MX是公有访问权限,所以,可以在继承以后的类外通过犀牛对象调用来访问

 

X1.Leg = 4;   //错误Leg属性在"动物类"中是私有访问权限,所以,在继承以后,也不可以在类

          外通过犀牛对象访问

X1.Attack();   //错误方法Attack在"动物类"中是私有访问权限,所以,不可以在类外通过犀牛

          对象调用来访问

 

 

 

 

 

  接下来,我们再来介绍私有的继承访问权限,而它的关键字是private

 

  (1)通过私有权限设置的继承,其“基类”中的“公有”与“私有”的属性与方法都不能在继承

     的类外被访问,也就是不能通过继承的类所定义的对象来进行访问

 

  (2)通过私有权限设置的继承,其“基类”中的公有属性与方法可以在继承的类内访问。

 

  (3)通过私有权限设置的继承,其“基类”中的私有属性与方法不可以在继承的类内访问。

 

 

 

 

  接下来,我们就结合例子来作进一步的说明

 

例子2:

//---------------------//

//   动物类  //

//---------------------//

Class  DongWu  

{

  private:

    int Leg;  //腿

    int Tail;  //尾

    int  x;    //移动的距离

    void Attack(); //攻击的方法

  public:

    int head; //头

    int body;  //身

    DongWu() //构造函数

    {

     head = 1;  

     body = 1;  

     Leg = 4;  

     Tail = 1;  

    }

    void MX(); //移动的方法

};

 

void Dongwu::MX()

{

   x=x+1;  //MX是类中的方法,可以防问私有属性x

   body = 1;  //MX是类中的方法,可以防问公有属性body

   Attack(); //Attack是私有的方法,但可以在类中的方法中调用

}

 

void Dongwu::Attack()

{

   x=x+1;  //Attack是类中的方法,可以防问私有属性x

   body = 1;  //Attack是类中的方法,可以防问公有属性body

}

 

//-----------------------//

//  犀牛类 XiNiu //

//-----------------------//

Class  XiNiu :private  DongWu 

{

  public:

    int  Jiao; //角

    XiNiu()

    {

     head = 0;  //head在动物类中的访问权限是公有,所以,可在继承的类XiNiu中访问

     body = 1;  //body在动物类中的访问权限是公有,所以,可在继承的类XiNiu中访问

     Leg = 4;  //错误,Leg在动物类中的访问权限是私有,所以,不可在继承的类XiNiu中访问

     Tail = 1;  //错误,Tail在动物类中的访问权限是私有,所以,不可在继承的类XiNiu中访问

     MX();  //MX方法在动物类中的访问权限是公有,所以,可在继承的类XiNiu中访问,从而,在

          MX方法中就可以访问到“动物类”中的私有属性x与私有方法Attack

    }

};

 

 

 

XiNiu  X1;    //定义一只犀牛对象

X1.head = 1;  //错误虽然head属性在”动物类“中是公有访问权限,但是,“犀牛类”XiNiu在继承

          “动物类”DongWu时,使用了私有权限private,所以,在继承以后,在“犀牛类”外

          不可以通过犀牛对象访问“动物类”中的公有属性。

 

X1.MX();    //错误虽然MX方法在”动物类“中是公有访问权限,但是,“犀牛类”XiNiu在继承

          “动物类”DongWu时,使用了私有权限private,所以,在继承以后,在“犀牛类”外不可          以通过犀牛对象访问“动物类”中的公有方法。

 

X1.Leg = 4;   //错误Leg属性在"动物类"中是私有访问权限,所以,在继承以后,也不可以在类

          外通过犀牛对象访问

X1.Attack();   //错误方法Attack在"动物类"中是私有访问权限,所以,在继承以后,也不可以在

          类外通过犀牛对象调用来访问

 

 

 

 

  通过上面的学习,相信大家对继承中的公有与私有的访问权限有了一个初步了解,但是,如何灵活地运用这个知识点呢?那么,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对该知识点的理解和运用,以及“尽快进入到编程的状态”

 

  要达到灵活运用,是需要通过不停地反复训练才可以做到,所以,不要停留在理论规则上面,快动起来吧!

 

 

(通过游戏模式学习与训练,需要在电脑上运行)

进入游戏学习与训练