C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
很多同学到现在仍然对访问权限不是很清楚,或者比较模糊,有的同学记了又忘,忘了又记,所以今天想要借这篇文章给大家做一些总结,然后提供一个比较简便的方法去记C++中的访问权限。
众所周知,C++通过public,protected,private三个关键字来实现类成员(包括成员变量和成员方法)控制访问权限,下面为了便于大家记忆,我给访问权限的大小定义:public > protected > private > no access, 基于这个定义给出我总结的一个小诀窍,就是:遇升不升,遇降则降,遇平则平,私有除外。访问权限的插图如下:
为了方便大家理解,给出解释:
1、当成员变量在父类中的访问权限为private时,不管采用哪种继承方式,在子类中的访问权限都变为no access,这叫私有除外。
2、当成员变量在父类中的访问权限为protected时,继承方式为public时,子类中的访问权限为protected,这叫遇升不升,继承方式为protected时,子类中的访问权限仍为protected,这叫遇平则平,继承方式为private时,子类中的访问方式变为private,这叫遇降则降。
3、当成员变量在父类中的访问权限为public时,继承方式为public时,子类中的访问权限为public,遇平则平;继承方式为protected时,子类中的访问权限为protected,遇降则降了吧,当继承方式为private时,子类中的访问权限为private,又遇降则降了吧。
通过上面的总结我们还发现,遇降则降,降幅总是个遇到的那个相同,比如public遇到了private时,访问权限就变为private,遇到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++ 私有内部类_C++类成员的访问权限以及类的封装
"程序员大咖,一个分享编程知识的公众号.跟着站长一起学习,每天都有进步. 文章不涉及代码,不烧脑细胞,人人都可以学习. 当你决定关注「程序员大咖CodePush」,你已然超越了90%的程序员 ...
- 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)
派生类和基类之间的特俗关系是基于C++继承的底层模型的. 总所周知,C++具有三种继承:公有继承.私有继承.保护继承. 最常见的就是公有继承,它建立一种is-a的关系. 如何理解is-a呢?即派生类对 ...
- 在继承中派生类成员的访问权限测试
派生类对自身基类的private成员没有访问权限,对基类对象的protected成员没有访问权限,对派生类对象的(基类之外)的private和protected成员具有访问权限. 由于C++基础不好, ...
- C++的三种访问权限的继承
C++的三种访问权限的继承 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年05月20日 三种访问权限继承指的是,继承过来的成员函数和成员变量还有析构函数的访问 ...
- C++学习 十五、类继承(1)基类,派生类,访问权限,protected
C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...
- 关于C++中公有继承、私有继承、保护继承的讨论
一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性 ...
- C++公有继承,保护继承,私有继承的区别
1.公有继承–public 公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员.派生类的对象只能访问派生类的公有成员(包 ...
- C++ 继承 | 对象切割、菱形继承、虚继承、对象组合
文章目录 继承 继承的概念 继承方式及权限 using改变成员的访问权限 基类与派生类的赋值转换 回避虚函数机制 派生类的默认成员函数 友元与静态成员 多继承 菱形继承 虚继承 组合 继承 继承的概念 ...
- C++知识点47——类继承中的类型转换与访问权限控制(下)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109768311 五.派生类向基类转换的可访问性 当一个子类向基类转化时:有以下三条规则 ...
最新文章
- 再谈浏览器兼容性测试
- Python staticmethod() 函数
- 分享Kali Linux 2017年第12周镜像文件
- 马斯克说要开放自动驾驶和电池技术,上周被特斯拉起诉的公司已哭晕
- Python中浮点数精度处理
- CentOs6.5下安装vim7.4
- 【STM32】OLED简介
- 学习Asp.Net经常会用到的函数集
- 【算法分析与设计】寻找假币问题
- 好老婆的作息时间(做女人真悲哀 ……)
- phpmyadmin 导出mysql_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]
- 2018年全球智能手机销售收入增至5220亿美元 但销量却下降了
- C++STL笔记(五):Deque详解
- 我父亲的新发明--玉米点播器
- 苹果mac预览应用使用方法
- 电脑上的回收站无法清空
- 关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);
- 【渝粤教育】电大中专Office办公软件 (14)作业 题库
- android 手写签批_Android自定义实现手写签名功能
- 杭州 职称 计算机免试,明年杭州市评职称 年满50周岁以上才免考计算机