无论如何我可以在没有继承的情况下访问类中的 protected 变量。

class ClassA{
  protected:
    int varA;
};

class ClassB{
  protected:
    ClassA objectA;

};


ClassB theMainObject;

我想通过 MainObject 访问 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;
}

所以有一种方法可以访问和修改 protected /私有(private)数据。
谁认为这是不可能的,请投票;)

关于C++ 保护访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5312042/

10-11 19:28