如何在类定义中访问已声明为static且 protected 的变量,以便在另一个文件中使用b.cpp
答案 0 :(得分:2)
允许使用protected
类成员(静态或非静态)的唯一代码是有问题的类的明确朋友和派生自相关类的类(当然还有类本身的成员)。因此,如果“您”想要访问该值,那么“您”必须是该类的朋友或从其派生的类的成员。
存在保护类(public
,protected
和private
)以提供数据保护。通过声明成员为protected
,该类的作者正在做一个半强的声明,说明应该允许哪些代码触及那段内存。如果您不是派生类或已获得明确friend
规范的许可,则不允许您触摸它。
您不应仅仅为了获得protected
静态成员的访问而从类中派生。如果基于派生类尝试执行此操作而有意义,则应该从类派生。
答案 1 :(得分:0)
声明为protected后,静态变量只能在其成员函数及其派生类(public,protected inheritance)中访问。
答案 2 :(得分:0)
我在一个无法修改的课程中遇到过这个问题(标准适配器),并在SO& S的帮助下提出了以下解决方案。谷歌!
#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。寻找“流标准适配器”。