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在"动物类"中是私有访问权限,所以,在继承以后,也不可以在
类外通过犀牛对象调用来访问
通过上面的学习,相信大家对继承中的公有与私有的访问权限有了一个初步了解,但是,如何灵活地运用这个知识点呢?那么,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对该知识点的理解和运用,以及“尽快进入到编程的状态”。
要达到灵活运用,是需要通过不停地反复训练才可以做到,所以,不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)