3

我有以下课程:-

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 的其他私有成员)访问,这不是我想要的。

这是可能的还是我应该改变我的对象模型?

4

1 回答 1

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();
}
于 2012-05-31T15:14:51.977 回答