gpt4 book ai didi

c++ - 添加到我的程序的导入功能破坏了 OOP 封装。如何恢复封装?

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:52 25 4
gpt4 key购买 nike

我有一个程序将它的信息存储在一个 XML 文件中。读入该文件并创建相应的对象模型。对象模型具有树状层次结构。我们将调用 BigHierarchy 的对象类型。

现在,我的程序具有允许用户导入另一个文件的功能。因此,当他选择他希望导入的文件时,我读取该文件并构造另一个 BigHierarchy 类型的对象来表示导入文件。所以现在我有了原始的 BigHierarchy 对象和我需要合并的新对象。由于它是一个层次结构,一些数据是私有(private)的并且不可访问。

如果我无权访问私有(private)数据,如何将导入对象与原始对象合并?我应该使用什么技术?叶节点是否应该与更高的节点交 friend ,以便我从顶部获得完整的可见性?我应该添加重载所有叶子和重载加运算符以便我可以合并所有内容,还是应该在每个级别创建成员函数来复制所有私有(private)数据。每个选项看起来都很乱。我该如何以最好的方式解决这个问题?

最佳答案

要获得准确的设计,您需要首先定义您的合并策略,以防私有(private)成员之间在最原子级别发生冲突。

  1. 用最新的覆盖
  2. 保持原创
  3. 合并更改

如果您采用方法 1,那么您将用新的 BigHierarchy 覆盖现有的 BigHierarchy。在这种情况下,您将需要允许设置私有(private)成员的访问方法。这样封装就不会受到影响。

如果您选择方法 2,那么您根本不会接触私有(private)成员。

对于选项 3,如果可能的话,为所有私有(private)成员提供合并功能是明智的。相反,我会强制我的对象实现合并并在执行合并时调用它传递新对象。

希望这对您有所帮助。

关于c++ - 添加到我的程序的导入功能破坏了 OOP 封装。如何恢复封装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com