来虎体育直播安装_在线最新版_娱乐安装


让中国的不锈钢管名扬世界

实标厚度-把诚信刻在脸上

全国免费加盟热线:

当前位置:来虎体育直播安装 > 新闻动态 > 行业动态 >

c++ - 在派生类中访问成员变量的地址。当成员具有不同的访问说明符时

文章出处:未知 人气:发表时间:2022-03-14

  当我使用 protected 公共(public)访问说明符时,我观察到不同的行为。

  如果我将类A中的成员变量a设置为public,则不会有任何编译错误,但是输出为1,我不知道为什么。

  1(为什么1),并且在尝试访问 protected 成员时没有出现错误?

  表达式&A::a尝试获取指向指向类A的成员a的成员的指针。如果a在A中 protected ,则此表达式仅通过类A(或A的 friend )内的访问检查。在从A派生的类B中,仅可以通过表达式&B::a获得指向成员的相同指针(请注意,此表达式的类型仍为int A::*)。所以:

  在下一段(5.3.1/4)中,将详细说明只有&X::m语法会生成指向成员的指针-&(X::m),&m或纯X::m都不会:

  但是,只有允许访问时,此类表达式才有效。对于 protected 成员(11.4/1)适用:

  在您的情况下,将授予对 protected 成员a的访问权限,因为对a的引用发生在从A派生的类B的成员中。当表达式尝试形成指向该成员的指针时,嵌套名称说明符(该部分最后一个“:: a”)之前必须表示B。因此,最简单的允许形式是&B::a。形式&A::a仅在A类本身的成员或 friend 中允许。

  没有用于成员的指针的格式化输出运算符(既不是istream成员也不是自由运算符函数),因此编译器将查看可以使用标准转换(序列)调用的重载。从指针到成员到其他对象的唯一标准转换在4.12/1中进行了描述:

  由于&A::a接受某个成员的地址,因此它不是空成员指针值。因此它将转换为true,其输出为“1”(noboolalpha)或“true”(boolalpha)。

  最后,即使a在A中 protected ,表达式&(A::a)在B的成员中也是有效的。通过上述规则,该表达式不会形成指向该成员的指针,因此上面引用的特殊访问规则不适用。对于这种情况,11.4/1继续:

同类文章排行

最新资讯文章

返回顶部