【问题标题】:C++ Granting AccessC++ 授予访问权限
【发布时间】:2018-12-20 17:03:41
【问题描述】:

在 C++ 中, 虽然授予访问权限,但不允许将变量从受保护降级为公共,但这种情况正在发生。

#include<iostream>
using namespace std;

class base {
    protected: int x;    // x is protected
};

class derived: private base { 
    public: base::x;     //demoting from protected to public must not happen
};

int main(){
    derived d1;
    d1.x=10;            //protected variable x is being accessed using an object**
    cout<<d1.x<<endl;
}

【问题讨论】:

  • 您的问题到底是什么?为什么这段代码有效?或者为什么它不起作用?或者可以改变什么来阻止它工作?
  • 假设基变量名为y,派生类使用int x = base::y。那么我希望你的例子没有任何问题
  • 代码起作用的原因是在派生类中的公共部分编译器将您的代码视为int x = base::x 并且派生类 x 变量是公共的
  • @KarstenKoop 抱歉之前没有澄清,我想问一下为什么代码有效。

标签: class c++11 inheritance public protected


【解决方案1】:

int 对象不是 protected,只是 名称 base::x

您的声明“正在访问受保护的变量 x”是不正确的。它不是。 derived::x 是一个公共成员,它只是引用base::x

basepublicprotected 成员对derived 可见,这是通过访问声明访问protected 变量base::x 的位置。

【讨论】:

  • @nathanesau 如果我们真的可以这样做,那么它不会违反受保护成员只能作为私有或受保护成员继承的规则
  • @SUMIT 什么规则?可能有一个组织样式规则 禁止这样做,但这不是 C++ 的规则。 很多更糟糕的事情是合法的 C++
猜你喜欢
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2017-06-03
  • 2013-06-26
  • 2020-06-16
相关资源
最近更新 更多