加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C受保护的访问

发布时间:2020-12-16 10:29:00 所属栏目:百科 来源:网络整理
导读:无论如何,我可以在没有继承的情况下访问类中的受保护变量. class ClassA{ protected: int varA; };class ClassB{ protected: ClassA objectA;};ClassB theMainObject; 我想通过theMainObject访问varA. 解决方法 我认为禁止修改ClassA的定义. 这对你来说是一
无论如何,我可以在没有继承的情况下访问类中的受保护变量.

class ClassA{
  protected:
    int varA; 
};

class ClassB{
  protected:
    ClassA objectA;

};


ClassB theMainObject;

我想通过theMainObject访问varA.

解决方法

我认为禁止修改ClassA的定义.

这对你来说是一个棘手的方式,但我不鼓励你使用它:)

class ClassA
{
protected:
   int varA; 
};

class ProtectedRemover // magic thing
{
public: // <- Note this! :)
   int varA;
};

class ClassB
{
protected:
   ClassA objectA;

public: // Just add two methods below

   int getProtectedVarA()
   {
      return reinterpret_cast<ProtectedRemover*>(&objectA)->varA;
   }

   void setProtectedVarA(int i)
   {
      reinterpret_cast<ProtectedRemover*>(&objectA)->varA = i;
   }
};

int main()
{
   ClassB theMainObject;

   // Set protected thing.
   theMainObject.setProtectedVarA(3); 

   // Get protected thing.
   std::cout << theMainObject.getProtectedVarA() << std::endl;
}

因此,有一种方法可以访问和修改受保护/私有数据.谁在想这是不可能的,投票;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读