私はclass A
しか持っていませんが、プライベートメンバー(包括的なデータ、メソッド、コンストラクタ、デストラクタなど)を持っています。また、私はclass A
の友人であるclass B
を持っています。そして私はすべての派生クラスB(Bから継承されたテンプレートもあります)をclass A
の友人にしたいと思います。これを行う方法はありますか?フレンドクラスの階層を作るには?
1
A
答えて
1
C++ではこれを直接サポートしていません。"a kid of my friend is not my friend"。
これを実装するには別の方法を使用する必要があります。例えば、class B
で保護されたアクセサ関数の集合を定義する:class A
が非常に小さい場合にのみ実現可能である
class A {friend class B; int x, y};
class B
{
protected:
int& AccessX(A& a) {return a.x;}
int& AccessY(A& a) {return a.y;}
}
。
class A
が大きい場合は、class B
とその派生クラスをclass A
としたいと思って、それを一連の関数として表現する必要があります。 class B
で保護された機能として、これらを定義します。
class A
{
A(): x(42), y(99) {}
friend class B;
int x, y;
}
class B
{
protected:
A Create() {return A();}
void Manage(A& object) {object.x += 1; object.y += 2;}
}
+2
クラスBで何も使用しないので、アクセス関数を静的にすることは意味があります。 –
関連する問題
- 1. DOMを階層的に作成する
- 2. 階層ビューの作成
- 3. n階層アプリケーションの作成
- 4. 階層型ネットワークの作成
- 5. Javaサブクラスの階層を作成する
- 6. デバッグビュー階層は
- 7. は、階層データ
- 8. 階層クエリは
- 9. Hibernateは、階層
- 10. 完全に空の階層の操作
- 11. RavenDB階層データ操作
- 12. NHibernateのは、階層
- 13. URL階層をツリー階層に解析する
- 14. 階層クエリは、iを1つの階層テーブルが
- 15. Pythonで階層化テーブルを階層型のjsonに変換する方法は?
- 16. アルゴリズム階層を作成するドロップダウン
- 17. Javaでネットワークパケット階層を作成する
- 18. 階層的なクラスターオブジェクトを作成する
- 19. Djangoで階層ビューを作成する
- 20. SSRSで階層/カスタムモデルを作成する
- 21. TFSでチェンジセットマージング階層を作成する
- 22. アンドロイドアプリビューの階層を知る方法(階層ビューアを除く)
- 23. 3階層アーキテクチャと2階層アーキテクチャ
- 24. 階層
- 25. 階層
- 26. 階層
- 27. 階層
- 28. オブジェクト階層のWebSphere階層は何ですか?
- 29. は、階層的データテンプレート
- 30. 階層化は、OCL
理由]]]]]]]]]]] –
はい。メンバーを 'private'の代わりに' protected'にしましょう。 –
私は他のクラスがB(および派生)がA型のインスタンスを作成および管理できると期待していないためです。 –