2011-10-08 57 views

回答

2

允许使用protected类的唯一代码使用一个变量成员(静态或不)是问题类的明确朋友和类从类中派生的问题(当然,类本身的成员)。因此,如果“你”想访问该值,那么“你”必须是该类的朋友或从它派生的类的成员。

存在保护等级(public,protectedprivate)以提供数据保护。通过声明成员为protected,那类作家正在大约应该被允许触摸到了一块内存什么码半强烈的声明。如果你不是一个派生类或已获准使用明确的friend规范,那么你不能碰它。

你不应该从一个类派生只是为了获得访问protected静态成员。你应该只从派生类派生,如果它是有道理的,根据你的派生类正在尝试做什么。

0

在宣布为受保护,静态变量只能用在它的成员函数访问和它的派生类(公共,保护继承)。

0

我曾经在一个我无法修改的课程中遇到了这个问题(标准适配器),并在Google的帮助下提出了以下解决方案!

#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。寻找“流媒体标准适配器”。

相关问题