0

すべての派生クラスがprivateMemberなくても、どうすれば到達できますか?friend

class parent{...};  //a virtual class

class A: public parent{...};
class B: public parent{...};
class C: public parent{...};
class D: public parent{...};
class E: public parent{...};
...
//each has a function, that want access to privateMember

class MyClass{
    int privateMember;

    friend parent;
    //I know it doesnt't work, but this shows the best what I want   
}
4

3 に答える 3

3

そのままにして(でfriend class parent)、それにアクセサ関数を追加します、、parent...AB使用します。保護されるため、階層外の関数は使用できません。

class parent {
protected:
  static int& getPrivate( MyClass & c ) { return c.privateMember; }
...
};

友情は派生クラスにまで及ばないため、これを行う必要があります。

于 2012-04-18T16:27:59.833 に答える
0

privateMemberを返すgetter関数を作成できます。

int getPrivateMember() const { return privateMEmber; }

もちろん、これは公的な方法でなければなりません。

于 2012-04-18T16:29:34.483 に答える
0

ここでの簡単な答えは、他のクラスの内部状態をいじくり回さないことです。代わりに、パブリックAPIを使用してください。このようにして、実装に自分自身を固定することを心配する必要がなく、変数を変更するときにクラスの不変条件を誤って壊してしまうというさまざまな潜在的な問題を回避できます。

于 2012-04-18T16:30:13.437 に答える