细粒度访问说明符c ++

时间:2012-05-31 15:01:19

标签: c++ oop private-members access-specifier

我有以下课程: -

class A {
  public:
    // some stuff that everyone should see
  protected:
    // some stuff that derived classes should see
  private:
    // some stuff that only I can see
    void f();
    void g();
};

现在,我希望f()只能从一组特定的类(比如B,C,D)和g()中访问,以便从某些其他类(例如D,E类, F)。有没有办法在C ++中指定它?如果我把A的所有班级都成为朋友,那么f& g将可以从B,C,D,E,F(以及A的其他私人成员)访问,这不是我想要的。

这可能或我应该更改我的对象模型吗?

1 个答案:

答案 0 :(得分:2)

class A_f {
    friend class B;
    void f();
};

class A_g {
    friend class C;
    void g();
};

class A: public A_f, public A_g {
    friend class A_f;
    friend class A_g;
private:
    void do_f();
    void do_g();
};

inline void A_f::f() { static_cast<A *>(this)->do_f(); }
inline void A_g::g() { static_cast<A *>(this)->do_g(); }

void B::something(A *a) {
    a->f();
}
相关问题