访问控制是针对类而不是针对对象

先看几个标准定义

  • A member of a class can be
    — private; that is, its name can be used only by members and friends of the class in which it is
    declared.
    — protected; that is, its name can be used only by members and friends of the class in which it is
    declared, and by members and friends of classes derived from this class (see 11.5).
    — public; that is, its name can be used anywhere without access restriction.
  • Member functions [class.mfct]
    Functions declared in the definition of a class, excluding those declared with a friend specifier (11.4),are called member functions of that class. A member function may be declared static in which case it is a static member function of its class (9.4); otherwise it is a nonstatic member function of its class (9.3.1,9.3.2).

再看几个例子

  • eg1 编译通过:

  • eg2 编译不通过:

  • 之前疑惑的地方在于:为什么静态成员函数可以访问私有成员变量

  • 以前比较困惑的是eg1 中图二的写法,但是仔细看文章开头的两个定义,

  • private修饰,是允许成员访问,

  • 我们再看成员函数的定义

    包括了静态成员函数和非静态成员函数,
    因此完美解释了eg1 为什么可以编译成功

2021/01/13更新:

这种情况也是可以编译通过的,
可见在父类的成员函数中,即使是子类,也是可以访问父类的私有成员变量的。

因此再次验证了那句话:

为什么静态成员函数可以访问私有成员变量?(访问控制是针对类而不是针对对象)相关推荐

  1. 封装之--通过类中公有方法访问私有成员变量

    如何在ClassB中访问ClassA的私有成员变量?(典型的封装案例) 通过在ClassA中定义公有的成员方法,然后,在ClassB中通过ClassA的对象调用ClassA中的公有方法,来访问Clas ...

  2. 友元函数可以访问私有成员吗_C++的友元函数和友元类

    C++使用类对数据进行隐藏和封装,类的数据成员一般定义为私有成员,而将提供类与外界通讯接口的成员函数定义为公有的. C++类成员的三种访问权限: public:可以被该类中的函数.子类的函数.友元函数 ...

  3. 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题

    直接上代码吧 template<class T> class vectorList : public linearList<T> { public: vectorList(si ...

  4. C++ 在一个类中用指针的形式申请堆内存构造出另一个类并访问私有成员变量(包括智能指针版本)

    一.普通指针版本 代码 #include<iostream> using namespace std;class A {public:A(){ax=2;cout<<" ...

  5. C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)

    接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...

  6. C++ 私有成员变量的理解

    私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了 ...

  7. python 私有和保护成员变量如何实现?—— 单下划线 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量; 双下划线 开始的是私有成员,意思是只有类对象自己能访问...

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  8. 私有成员变量理解的补充

    在设计和实现当前类时,实现拷贝构造函数和赋值构造函数时,甚至在成员函数的内部是可以直接访问当前类的对象(以参数的形式)的私有成员变量的.考虑如下的代码: class Test { public:Tes ...

  9. 在python语言中定义私有成员变量的方法是_Python在类中有“私有”变量吗?

    回答(11) 2 years ago python中的私有变量或多或少是一个hack:解释器故意重命名变量 . class A: def __init__(self): self.__var = 12 ...

最新文章

  1. Linux Socket基础介绍
  2. 200米外遥测心跳确定身份,五角大楼全新黑科技,比人脸识别更准、伪装也没用...
  3. python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...
  4. 全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点
  5. 20非常有用的Java程序片段(11-15)
  6. 查看sql server 数据库连接数
  7. educoder实训答案python_Educoder Python入门之经典函数实例
  8. 网站Banner图切换效果(flash)
  9. autoreconf:未找到命令
  10. excel部分快捷键
  11. 怎么去掉抖音短视频上的水印
  12. 【web-攻击用户】(9.3.2)诱使用户执行操作--请求伪造——UI伪装
  13. 颜色匹配 opencv版
  14. C++ 地图涂色问题 栈递归
  15. bugku 二维码题目 多种方法解决、闪的好快、乌云邀请码
  16. Mulesoft,两个月考证准备,每天进步一点点!
  17. 您可以在哪里播放最喜欢的圣诞节特价商品
  18. 【数学】如何求e的值
  19. 在nsa组网架构中,3gpp定义的nr与epc的接口是什么
  20. UIUC数学计算机专业,UIUC的Statistics「伊利诺伊大学香槟分校统计系」

热门文章

  1. Ammeter 仪表板控件
  2. MarkDown编辑器 - MarkText使用文档
  3. 增长率相关速算法原理推导
  4. 17964 水桶打水
  5. 如何设置路由器并利用路由器+宽带猫实现单机或是多机共享自动拨号上网
  6. fir多相滤波器实现
  7. java单根结构_java“单根继承结构”
  8. 计算机低配配置单,吃鸡需要什么配置|电脑玩绝地求生最低配置多少
  9. WLAN 无线二层组网,旁挂AC
  10. DataGuard - 利用Cascaded Redo Log Destinations避免WAN稳定性问题