C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
2018-03-24 16:28
811 查看
zz: http://blog.sina.com.cn/s/blog_b35e31b90101b6y7.html
为了防止连接失效,所以直接转过来备份了!
很多同学到现在仍然对访问权限不是很清楚,或者比较模糊,有的同学记了又忘,忘了又记,所以今天想要借这篇文章给大家做一些总结,然后提供一个比较简便的方法去记C++中的访问权限。
众所周知,C++通过public,protected,private三个关键字来实现类成员(包括成员变量和成员方法)控制访问权限,下面为了便于大家记忆,我给访问权限的大小定义:public
> protected > private >
no access, 基于这个定义给出我总结的一个小诀窍,就是:遇升不升,遇降则降,遇平则平,私有除外。访问权限的插图如下:
公有继承、保护继承和私有继承中类成员的访问权限的控制” title=”C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制” style=”margin:0px; padding:0px; border:0px; list-style:none”>
为了方便大家理解,给出解释:
1、当成员变量在父类中的访问权限为private时,不管采用哪种继承方式,在子类中的访问权限都变为no
access,这叫私有除外。
2、当成员变量在父类中的访问权限为protected时,继承方式为public时,子类中的访问权限为protected,这叫遇升不升,继承方式为protected时,子类中的访问权限仍为protected,这叫遇平则平,继承方式为private时,子类中的访问方式变为private,这叫遇降则降。
3、当成员变量在父类中的访问权限为public时,继承方式为public时,子类中的访问权限为public,遇平则平;继承方式为protected时,子类中的访问权限为protected,遇降则降了吧,当继承方式为private时,子类中的访问权限为private,又遇降则降了吧。
通过上面的总结我们还发现,遇降则降,降幅总是个遇到的那个相同,比如public遇到了private时,访问权限就变为pri
4000
vate,遇到protected时,就变为protected。
明白了上面表格中的规律后,我们就可以很方便的运用这种访问权限机制来编写程序了,在此之前我们还要了解的是,一个类成员的访问权限确定后,又对应了两种情况,一种是在类内,一种是在类外。总结一下:
在类内部:只要不是no access,那么我们都可以访问该成员。也就是说类内部的访问权限比较松,凡是可访问的权限都能访问,不论是public、protected还是private。
在类外部:只要不是public,那么我们都不可以访问该成员。也就是说在类的外部访问权限比较严格,只要访问权限不是public的成员,在类外部都不能访问它。
明白了吗?
为了让大家再深刻的理解上面的总结,我还为大家设计了下面的小小的测试程序:希望用心的同学自己动手亲自测试一下:
class Animal //父类
{
public:
void
eat(){
cout<<”animal
eat”<<endl;
}
protected:
void
sleep(){
cout<<”animal
sleep”<<endl;
}
private:
void
breathe(){
cout<<”animal
breathe”<<endl;
}
};
class Fish:public Animal //子类
{
public:
void
test(){
eat(); //此时eat()的访问权限为public,在类内部能够访问
sleep(); //此时sleep()的访问权限为protected,在类内部能够访问
breathe(); //此时breathe()的访问权限为no
access,在类内部不能够访问
}
};
int main(void){
Fish
f;
f.eat(); //此时eat()的访问权限为public,在类外部能够访问
f.sleep(); //此时sleep()的访问权限为protected,在类外部不能够访问
f.breathe() //此时breathe()的访问权限为no
access,在类外部不能够访问
}
上面的代码肯定编译出错,希望大家把继承方式分别更改为protected和private都测试一下,这样你就什么都明白了。
为了防止连接失效,所以直接转过来备份了!
很多同学到现在仍然对访问权限不是很清楚,或者比较模糊,有的同学记了又忘,忘了又记,所以今天想要借这篇文章给大家做一些总结,然后提供一个比较简便的方法去记C++中的访问权限。
众所周知,C++通过public,protected,private三个关键字来实现类成员(包括成员变量和成员方法)控制访问权限,下面为了便于大家记忆,我给访问权限的大小定义:public
> protected > private >
no access, 基于这个定义给出我总结的一个小诀窍,就是:遇升不升,遇降则降,遇平则平,私有除外。访问权限的插图如下:
公有继承、保护继承和私有继承中类成员的访问权限的控制” title=”C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制” style=”margin:0px; padding:0px; border:0px; list-style:none”>
为了方便大家理解,给出解释:
1、当成员变量在父类中的访问权限为private时,不管采用哪种继承方式,在子类中的访问权限都变为no
access,这叫私有除外。
2、当成员变量在父类中的访问权限为protected时,继承方式为public时,子类中的访问权限为protected,这叫遇升不升,继承方式为protected时,子类中的访问权限仍为protected,这叫遇平则平,继承方式为private时,子类中的访问方式变为private,这叫遇降则降。
3、当成员变量在父类中的访问权限为public时,继承方式为public时,子类中的访问权限为public,遇平则平;继承方式为protected时,子类中的访问权限为protected,遇降则降了吧,当继承方式为private时,子类中的访问权限为private,又遇降则降了吧。
通过上面的总结我们还发现,遇降则降,降幅总是个遇到的那个相同,比如public遇到了private时,访问权限就变为pri
4000
vate,遇到protected时,就变为protected。
明白了上面表格中的规律后,我们就可以很方便的运用这种访问权限机制来编写程序了,在此之前我们还要了解的是,一个类成员的访问权限确定后,又对应了两种情况,一种是在类内,一种是在类外。总结一下:
在类内部:只要不是no access,那么我们都可以访问该成员。也就是说类内部的访问权限比较松,凡是可访问的权限都能访问,不论是public、protected还是private。
在类外部:只要不是public,那么我们都不可以访问该成员。也就是说在类的外部访问权限比较严格,只要访问权限不是public的成员,在类外部都不能访问它。
明白了吗?
为了让大家再深刻的理解上面的总结,我还为大家设计了下面的小小的测试程序:希望用心的同学自己动手亲自测试一下:
class Animal //父类
{
public:
void
eat(){
cout<<”animal
eat”<<endl;
}
protected:
void
sleep(){
cout<<”animal
sleep”<<endl;
}
private:
void
breathe(){
cout<<”animal
breathe”<<endl;
}
};
class Fish:public Animal //子类
{
public:
void
test(){
eat(); //此时eat()的访问权限为public,在类内部能够访问
sleep(); //此时sleep()的访问权限为protected,在类内部能够访问
breathe(); //此时breathe()的访问权限为no
access,在类内部不能够访问
}
};
int main(void){
Fish
f;
f.eat(); //此时eat()的访问权限为public,在类外部能够访问
f.sleep(); //此时sleep()的访问权限为protected,在类外部不能够访问
f.breathe() //此时breathe()的访问权限为no
access,在类外部不能够访问
}
上面的代码肯定编译出错,希望大家把继承方式分别更改为protected和private都测试一下,这样你就什么都明白了。
</div>
相关文章推荐
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++基类和派生类私有、保护、公有成员访问控制以及动态绑定、三种继承
- C++编程中私有和保护以及公有的类成员访问控制
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- C++公有保护私有继承方式权限
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- 三十八、继承与派生:派生类对基类成员的访问控制之保护继承与私有继承
- C++ 保护,私有继承,公有继承 ---访问属性--关系
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护(转)
- C++ 继承 访问权限控制
- 继承的访问控制_保护继承_保护成员的声明(C++语言)
- C++ 私有、保护、公有继承
- 对C++保护继承的访问控制进行验证
- c++:私有继承,公有继承,保护继承