Oop C+中不同类的不同访问权限+;

Oop C+中不同类的不同访问权限+;,oop,visual-c++,Oop,Visual C++,我有一个关于访问权限的问题 我正在编写一个C++游戏的版本(面向对象)。 我需要帮助的部分包括三个类: 存储类用于在阵列中存储单元。当然,这个数组是私有的,这个类有公共方法来设置单元格的生命状态并返回单元格的生命状态 Manager类应该管理单元格,这基本上意味着它是唯一能够访问SetCell方法的类 Neighbourfinder类是我感兴趣的地方:它应该能够使用ReturnCell存储方法来查找一个单元格的活动邻居,但不能使用SetCell方法 我可以将SetCell私有化,并将Mana

我有一个关于访问权限的问题

我正在编写一个C++游戏的版本(面向对象)。 我需要帮助的部分包括三个类:

  • 存储类用于在阵列中存储单元。当然,这个数组是私有的,这个类有公共方法来设置单元格的生命状态并返回单元格的生命状态
  • Manager类应该管理单元格,这基本上意味着它是唯一能够访问SetCell方法的类
  • Neighbourfinder类是我感兴趣的地方:它应该能够使用ReturnCell存储方法来查找一个单元格的活动邻居,但不能使用SetCell方法
我可以将SetCell私有化,并将Manager设置为好友存储类,但这也意味着Manager可以直接访问阵列,这是我不想要的。
简而言之:

一个类有一个数组和两个方法。每个方法都应可由不同的类访问,不允许任何类访问数组。

我希望这是可以理解的,不会被标记为重复。

Storage
Manager
类几乎总是一个坏主意。您的设计导致了编码问题
Neighbourfinder
是另一个遵循“动词er”模式的类,可能也是一个同样糟糕的主意

相反,您需要的主要类是
Board
。它知道董事会规则,这就是为什么它被称为
board
。因此,
Board::SetCell
private
。Board::nextrund()方法可以是公共的


我还可以看到一个
Board::countliveneights
方法,但它也可以是
私有的
,因为只有在
nextrund
的实现中才需要它

存储
管理器
类几乎总是一个坏主意。您的设计导致了编码问题
Neighbourfinder
是另一个遵循“动词er”模式的类,可能也是一个同样糟糕的主意

相反,您需要的主要类是
Board
。它知道董事会规则,这就是为什么它被称为
board
。因此,
Board::SetCell
private
。Board::nextrund()方法可以是公共的


我还可以看到一个
Board::countlivenextriends
方法,但它也可以是
私有的
,因为只有在
nextrund
的实现中才需要它。Wilsu:No,
nextrund
将Board更新到下一个状态。它不输出它。输出需要一个新的方法(在这种情况下,
Board::GetCell
可以是私有的)或者在
Board
之外的一个新函数(在这种情况下,`GetCell必须是公共的)。@Wilsu:SRP实际上意味着单元格和单元格的规则属于同一类。不过,这些细胞可能应该存储在
std::vector
中,SRP说
Board
不应该处理
new[]
。这是矢量的责任意外删除了我的评论,对不起。好的,谢谢你的帮助。@Wilsu:不,
nextrond
将板更新到下一个状态。它不输出它。输出需要一个新的方法(在这种情况下,
Board::GetCell
可以是私有的)或者在
Board
之外的一个新函数(在这种情况下,`GetCell必须是公共的)。@Wilsu:SRP实际上意味着单元格和单元格的规则属于同一类。不过,这些细胞可能应该存储在
std::vector
中,SRP说
Board
不应该处理
new[]
。这是矢量的责任意外删除了我的评论,对不起。好的,谢谢你的帮助。