2011-11-09 4 views
0
私はこのソリューションを知らない

...プライベートクラスのリストにアクセスするには?例えば

、私のコードは、

class Bank 
{ 
private : 
    list < Client*> clientList; 

} 

class Client 
{ 
private : 
list< Account*> accountList; 

} 

class account 
{ 
private 
list< string> statement; 

} 

あるああ、私は銀行のクラスでステートメントをアクセスしたいです!私はそのアクセス方法について考えています。

1)クライアントクラスでlist< Account*> getAccountList()メソッドを作成し、アカウントでlist<string> getStatement()メソッドを作成しています。

なぜリストはプライベートですか?まあ、一般公開されるかもしれない?

2)すべてのクラスでは、リストのアクセス方法(うーん、例えば、ポップとプッシュ?)..

作る私は2を得たが、それはひどいです。私はやるべきことがたくさんあり、同じような機能を繰り返しました...

何が最善の方法ですか?それは私が決して知らない方法ですか?

+0

これはJavaと何が関係していますか? –

+0

この宿題ですか? – crashmstr

+0

これは可能な解決策です:http://stackoverflow.com/q/3911098/79455 – rve

答えて

1

最善の解決策は、リストにconst参照を返す各クラスのアクセサメソッドを持つことです。

const_iteratorを返すメソッドを持たせることができますが、それぞれのクラスに対して、beginendなど必要なリスト操作を返すメソッドを持たなければなりません。

+0

うわー、ありがとう! –

+0

@ Johnpark:それはQを掲示するあなたの唯一の目的は、実装が完了し、解決策を理解していないようです。 –

0

通常、クラスのプライベートメンバーにはアクセスしないでください。これは基本的なOOの概念です。しかし、あなたはあなたのリストへの読み取り専用アクセス権を持つようにしたい場合、単に好きなことのconst参照を返すに:

const list<Client*>& getList()const{ 
    return clientList; 
} 
0

を他の人が述べたように、交互に、あなたは、リストの最初と最後にイテレータを返すことができます。

0

宿題?

あなたのプログラムには、すべてあなたのBankクラスにアクセスする20のクラスが含まれており、異なるプログラマがこれらのクラスを記述しているとします。

次に、銀行オブジェクトには、それが想定するリスト内のクライアントがないことがわかります。

原因を発見すると、すべてのクラスがBank.clientlistを(おそらく誤って)変更するかどうかを理解することができます。

これは、クライアントリストへのアクセスをカプセル化する理由の1つです。カプセル化には他にも理由があります。

class Account 
{ 
    private: 
     list<string> statements; 

    public: 
     const list<string>& getStatements() const 
     { 
     return statements; 
     } 
}; 

返されたリストの参照が変更できませんので、これは公共のよりも優れている:

カスパー

関連する問題