在另一个文件中使用受保护的静态变量
Using protected static variable in another file
如何访问在类定义中声明为静态且受保护的变量以便在另一个文件b.cpp
允许使用protected
类成员(静态或非静态)的唯一代码是所讨论的类的显式友类和从所讨论的类派生的类(当然还有类本身的成员)。因此,如果"you"想要访问该值,那么"you"必须要么是该类的友元,要么是从它派生的类的成员。
存在public
、protected
、private
三个保护等级对数据提供保护。通过将成员声明为protected
,该类的编写者对允许哪些代码访问该内存块做了半强声明。如果你不是一个派生类,或者已经获得了明确的friend
规范的许可,那么你就不允许碰它。
不应该仅仅为了访问protected
静态成员而从类派生。您应该只在基于您的派生类试图做的事情有意义的情况下从一个类派生。
声明为protected后,static变量只能在其成员函数和派生类(public, protected inheritance)中访问。
我曾经在一个我无法修改的类(标准适配器)中遇到过这个问题,并在SO &谷歌!
#include <iostream>
class my_type{
protected:
static int var;
};
int my_type::var = 0;
int& get_var(my_type& obj){
class protected_accessor : my_type{
public:
static int& get_var(my_type&){
return my_type::var;
}
};
return protected_accessor::get_var(obj);
}
int main(){
my_type obj;
std::cout << get_var(obj) << std::endl;
get_var(obj) = 1;
std::cout << get_var(obj);
}
我在我的小实用程序https://bitbucket.org/AraK/streamer/wiki/Developer_FAQ中使用了这段代码的一个变体。查找"流媒体标准适配器"
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 公共/私有/受保护是否会更改内存中结构的排列?
- 在父类中公开受保护的构造函数
- 如何从其他结构访问受保护的结构变量
- 类的静态成员变量(受保护)的作用域
- 为什么我得到带有受保护静态成员的 C2248(无法访问的成员)
- 对受保护静态成员的未定义引用.我该如何解决
- QThread:如何使用受保护的静态函数
- 通过继承共享的静态受保护资源
- 通过C++中的子类访问超类的受保护静态成员
- 从基类的静态模板方法中调用继承类的受保护 ctor 失败
- 从模板化(静态)成员函数访问受保护的成员
- 类中受保护的静态枚举的链接器错误,即使已经定义
- 为什么允许在派生类中调用受保护的静态方法
- 在另一个文件中使用受保护的静态变量
- 可以从派生类中的静态函数访问基类受保护的成员吗?
- 派生类中的静态方法可以调用c++中的受保护构造函数吗?