C++ 在考试中使用友谊

C++ 在考试中使用友谊,c++,testing,friend,C++,Testing,Friend,我正在寻找一种“干净”的方式来访问测试上下文中的一些私有成员变量,而不必接触原始代码。我正在考虑与测试类实现友谊关系,但由于某些原因,我不明白它仍然需要受保护的访问器才能工作。为什么会这样?是否有其他方法访问私有成员变量 class A { protected: // this works // private: // this DOES not work int a; }; class TestableA : public A { friend class Te

我正在寻找一种“干净”的方式来访问测试上下文中的一些私有成员变量,而不必接触原始代码。我正在考虑与测试类实现友谊关系,但由于某些原因,我不明白它仍然需要受保护的访问器才能工作。为什么会这样?是否有其他方法访问私有成员变量

class A
{
protected:    // this works
// private:   // this DOES not work


    int a;
};

class TestableA : public A
{
    friend class TestA;
};

class TestA
{
    void test()
    {
        m_a.a = 100;
    }

    TestableA m_a;
};

不能从派生类访问私有变量,只能访问protecteds

TestA
TestableA
的朋友,因此它可以查看
TestableA
包含的所有内容。但是如果
a
是私有的,您就不能在
TestableA
中访问它

您有几个选择:

  • 到处使用受保护的设备
  • 直接将好友声明添加到类
    A
    。您甚至可以使用宏来执行此操作,这只会影响调试/测试生成

有关此主题的更多信息,请参阅名为

的精彩演示,感谢您解释原因并提供链接。这个想法是不修改原始代码,但似乎没有其他方法。视频就是关于这个问题的——它提出了一种在类外为这个案例添加好友的方法,目前作为一个叮当插件实现。