2011-11-09 177 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(可能是错误的)。

这是封装访问客户列表的原因之一。还有其他原因封装,也有一些反对他们。

卡斯帕