C++中public、protect、private的访问权限控制

访问权限

一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问

一个类的protected成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。

一个类的private成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。

 

继承权限
public继承
派生类通过public继承,基类的各种权限不变 。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,可以访问基类的public成员,但是无法访问protected、private成员,仿佛基类的成员之间加到了派生类一般。
可以将public继承看成派生类将基类的public,protected成员囊括到派生类,但是不包括private成员。

protected继承
 派生类通过protected继承,基类的public成员在派生类中的权限变成了protected 。protected和private不变。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,无法访问基类的任何成员,因为基类的public成员在派生类中变成了protected。
可以将protected继承看成派生类将基类的public,protected成员囊括到派生类,全部作为派生类的protected成员,但是不包括private成员。
private成员是基类内部的隐私,除了友元,所有人员都不得窥探。派生类的友元,都不能访问

private继承
派生类通过private继承,基类的所有成员在派生类中的权限变成了private。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,无法访问基类的任何成员,因为基类的所有成员在派生类中变成了private。
可以将private继承看成派生类将基类的public,protected成员囊括到派生类,全部作为派生类的private成员,但是不包括private成员。
private成员是基类内部的隐私,除了友元,所有人员都不得窥探。派生类的友元,都不能访问

总结:继承修饰符,就像是一种筛子,将基类的成员筛到派生类。public、protected、private,就是筛子的眼。
通过public继承,所有基类成员(除了private),public、protected都到了派生类里面,public筛眼比较大,不会改变访问权限。
通过protected继承,所有基类成员(除了private),public、protected都到了派生类里面,protected筛眼大小适中,所有过来的成员都变成了protected。
通过private继承,所有基类成员(除了private),public、protected都到了派生类里面,private筛眼最小,所有过来的成员都变成了private。

继承总结:

1.private 、protect 、public 继承base类后,子类的成员函数都只能访问base类中public、protect中的成员

2.子类实例化一个对象后,对象只能调用和访问子类中的public成员(父类成员在子类中的访问权限 1.看其在父类中的访问权限 2.看子类继承父类的权限)

成员:成员变量和成员函数。

转自 https://www.cnblogs.com/langzou/p/9855582.html

c++ 之private /protect/ public的更多相关文章

  1. public private, protect. 以及继承。 草稿。

    #include <iostream>#include <thread>#include <memory> // | 父类的public成员 | 父类的protec ...

  2. public private protect

    public 公有  使用public意味着声明public之后的成员对每个人都是可用的 private 私有  除非必须公开底层实现细目,否则就应该将所有的域指定为private protect 继 ...

  3. [Java] Protect, Private and Public的区别

    Java中的private.protected.public和default的区别 (2014-03-21 22:29:14) 转载▼ 标签: java java修饰符 it   (1)对于publi ...

  4. C++ public private protect 继承关系(链接)

    基础链接 总结:  public继承基类成员访问权限没有变化; protected继承基类public和protected权限变为protected,基类private不变. private继承基类p ...

  5. Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance, we've been making all of our data members public in order to ...

  6. 当一个类、一个实例域、方法被定义为private、public 时意味着什么

    1.设计private public的原因 2.当一个类.一个实例域.方法被定义为private.public 时意味着什么

  7. C++类:private、public、friend、protected的区别

           private和public的作用是让编译器帮你检查某些模块是否使用了他没权限使用的模块,也就是生成可执行代码的时候做权限检查.比如,公司里各个部门有自己私有的信息,财务部可以看所有员工 ...

  8. private,protected,public和default的区别

    private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...

  9. 对private protected public的详解:

    #include <iostream> #include <stack> #include <queue> #include <exception> # ...

随机推荐

  1. Python—“helloworld”

    接触一门计算机新语言,第一件事就是要准备好一个编译器用来打代码. 网上很多环境搭建的方法,具体参照https://www.runoob.com/python/python-install.html 由 ...

  2. 从 s 点到 t 点的最短路(简单模板)(迪杰斯特拉)

    迪杰斯特拉简单版 #include <bits/stdc++.h> using namespace std; int m,n; const int inf = 0x3f3f3f3f; in ...

  3. 用MFC构造DIRECTX应用框架

    一. MFC类库与DirectXSDK Microsoft DirectX SDK是开发基于 Windows平台游戏的一个软件开发工具,其主要功能主要包括在五个组件中: DirectDraw. Dir ...

  4. uiautomatorviewer真机使用报错Error obtaining UI hierarchy

    Mac OS+Android真机 8.0在使用uiautomatorviewer获取界面时报Error obtaining UI hierarchy Reason: Error while obtai ...

  5. JavaWeb_(Mybatis框架)动态sql_七

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  6. nginx安装第三方模块echo-nginx-module

    cd ~ wget -S https://github.com/agentzh/echo-nginx-module/archive/master.zip mv master echo-nginx-mo ...

  7. python项目生成及导入依赖的第三方库

    requirements.txt用来记录项目所有的依赖包和版本号,只需要一个简单的pip命令就能完成. pip freeze >requirements.txt 然后就可以用 pip insta ...

  8. 在调试linux的休眠功能时如何打开调试信息开关?

    答:在bootargs中添加参数no_console_suspend即可进行调试

  9. kotlin 之单表达式函数

    fun d(x:Int):Int=x* 如果函数体只有一条语句,而且是return语句,那么可以省略大括号以及return关键字,

  10. Tomca的启动与关闭

    点击startup.bat启动,遇到一闪而过的问题,可能尚未配置JAVA_HOME 8080端口被占用导致启动失败 关闭Tomcat的三种方式 * 点击x (不推荐) * 双击shutdown.bat ...