如何/应该隐藏C++静态成员变量和函数?

CW *_* II 0 c++ encapsulation c++11

m_MAX和ask()由run()使用,但不应该是公共的.怎么能/应该这样做?

#include <vector>
class Q {
public:
    static int const m_MAX=17;
    int ask(){return 4;}
};
class UI {
private:
    std::vector<Q*> m_list;
public:
    void add(Q* a_q){m_list.push_back(a_q);}
    int run(){return Q::m_MAX==m_list[0]->ask();}
};
int main()
{
    UI ui;
    ui.add(new Q);
    ui.add(new Q);
    int status = ui.run();
}
Run Code Online (Sandbox Code Playgroud)

Deu*_*uro 5

你可以在Q类的私有部分中定义m_MAX和ask().然后在Q中添加:"friend class UI".这将允许UI访问Q的私有成员,但没有其他人.另请注意,必须在"friend class UI"语句之前定义UI.前瞻性声明将起作用.