2011-11-09 176 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引用存取方法:

class Account 
{ 
    private: 
     list<string> statements; 

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

這比大衆更好,因爲返回的列表引用是不可修改的。

你可能有返回const_iterator的方法,但是你必須在每個類上都有返回begin,end的方法,以及你期望可能需要的任何其他列表操作。

+0

哇,謝謝! –

+0

@Johnpark:看起來你只是想發佈Q,目的是爲了完成實現並且不理解解決方案。 –

0

通常情況下,你不應該訪問你的班級的私人成員這是基本的面向對象的概念。但是,如果你想擁有你的列表只讀訪問只返回它的const引用,如:

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

正如其他人所說,交替你可以返回迭代器列表的開始和結束。

0

家庭作業?

假設你的程序包含20個類都可以訪問你的Bank類,不同的程序員已經寫了這些類。

然後你發現一個銀行對象在它應該有的列表中沒有客戶端。

發現原因可能需要了解所有類,看看它們中的一個是否修改了Bank.clientlist(可能是錯誤的)。

這是封裝訪問客戶列表的原因之一。還有其他原因封裝,也有一些反對他們。

卡斯帕