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

Mis*_*eky 2 c++ inheritance class 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
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏的范围怎么样?不应该至少可以访问全局变量check()

Jon*_*ely 6

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

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

要引用一个不同的,test你需要对其进行限定,因此全局test将被称为::test