如何访问私人班级名单?

时间:2011-11-09 17:02:11

标签: c++

我不知道这个解决方案......

例如,我的代码是,

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)在All Class中制作列表访问方法(例如,pop和push?)..

我得到了2.但是太可怕了。我有很多事要做,并且重复了类似的功能...

最好的方法是什么?这是我永远不知道的方式?

4 个答案:

答案 0 :(得分:1)

最好的解决方案是在每个类中使用访问器方法返回对列表的const引用:

class Account
{
   private:
      list<string> statements;

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

这比public更好,因为返回的列表引用不可修改。

您可以让方法返回const_iterator,但是每个类都必须有返回beginend的方法,以及您希望可能需要的任何其他列表操作。

答案 1 :(得分:0)

通常你不应该访问你班级的私人成员这是基本的OO概念。但是如果你想要对列表进行只读访问,只需返回它的const引用,如:

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

答案 2 :(得分:0)

正如其他人提到的那样,您可以将迭代器返回到列表的开头和结尾。

答案 3 :(得分:0)

作业?

假设您的程序包含20个可以访问您的Bank类的类,不同的程序员编写了这些类。

然后你发现一个银行对象没有它应该具有的列表中的客户端。

发现原因可能需要了解所有类,看看其中一个是否修改了Bank.clientlist(可能是错误的)。

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

卡斯帕