在另一个文件中使用受保护的静态变量

Using protected static variable in another file

本文关键字:受保护 静态 变量 另一个 文件      更新时间:2023-10-16

如何访问在类定义中声明为静态且受保护的变量以便在另一个文件b.cpp

允许使用protected类成员(静态或非静态)的唯一代码是所讨论的类的显式友类和从所讨论的类派生的类(当然还有类本身的成员)。因此,如果"you"想要访问该值,那么"you"必须要么是该类的友元,要么是从它派生的类的成员。

存在publicprotectedprivate三个保护等级对数据提供保护。通过将成员声明为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中使用了这段代码的一个变体。查找"流媒体标准适配器"