簡體   English   中英

細粒度訪問說明符c ++

[英]Fine grained access specifiers c++

我有以下課程: -

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的其他私人成員)訪問,這不是我想要的。

這是可能的,還是應該更改我的對象模型?

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM