C++:从派生类访问基变量或全局变量的私有成员
C++ : Accessing private member of base or global variable from a derived class
在以下代码片段中,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
。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- 指向作为类成员的全局变量的指针
- C++:为什么与访问全局变量相比,访问类数据成员如此缓慢
- C++:从派生类访问基变量或全局变量的私有成员
- 全局变量是只读的,并在 openmp 中"false sharing"写入私有类成员
- 在C++中实现全局变量和静态成员变量的动态初始化