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

C++ : Accessing private member of base or global variable from a derived class

本文关键字:全局变量 成员 变量 派生 访问 C++      更新时间:2023-10-16

在以下代码片段中,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()不应该至少访问全局变量吗?

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

类作用域中的名称查找将首先在其自己的作用域中查找,然后在基类中查找,再在封闭作用域(如周围的命名空间作用域)中查找。因此,在派生类中,查找不合格名称test并找到Base::test,然后在名称查找找到它之后执行访问检查,并且找到的实体是私有的,因此会出现错误。

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

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

如果要从派生类访问test,则需要将其声明为protected