C ++:从派生类访问基类或全局变量的私有成员

时间:2014-09-23 11:55:00

标签: c++ class inheritance c++11

在以下代码段中,check()无法访问名为test的变量:

int test; //global variable
class Base {
private:
    int test; //private member of Base
public: 
    void getit() {
         cin>>test;
    }
};

class Derived: public Base {
public:
    void check(){ 
        test ++; //Increments neither global variable nor private member of Base
    }
}

我在这里遗漏的范围怎么样?至少check()

是否可以访问全局变量?

2 个答案:

答案 0 :(得分:6)

可见性和访问权限检查是独立的,这意味着私有名称不会被隐藏"并且仍然可以通过名称查找找到它们,即使使用它们也会出错。

类范围中的名称查找首先查看其自己的范围,然后查看基类,然后查看封闭的范围,例如周围的命名空间范围。因此,在派生类中,查找非限定名称test并找到Base::test,然后在名称查找后发现它已执行访问检查,并且找到的实体是私有,所以你得到一个错误。

要引用其他test您需要对其进行限定,因此全局test将被称为::test

答案 1 :(得分:1)

私人是私人的。派生类无法访问其基类的私有属性。

如果您想从派生类访问test,则需要声明它protected