代码之家  ›  专栏  ›  技术社区  ›  YYC

C++:对同一架构层成员函数访问的建议

  •  1
  • YYC  · 技术社区  · 15 年前

    我有以下四个等级:

                         MyTop
                           |
                  -------------------
                  |        |        |
                BlockA   BlockB   BlockC
    

    BlockA , BlockB 和 BlockC 组成的对象是 MyTop . 布洛卡 提供一个函数 LookUpTable() 和 乱套五分前 和 块体 现在需要访问 布洛卡 . 什么是好的(或至少是典型的)实践 乱套五分前 和 块体 访问查找表?

    我考虑将查找表实现为类本身,但是循环表的内容与 布洛卡 将表与 布洛卡 (这仍然可行,但不是首选)。现在我的解决方案是通过 乱套五分前 和 块体 到 麦拓 ,然后让 麦拓 管理模块之间的通信。但是,当有更多的块需要访问中的查找表时,这似乎不是处理问题的好方法。 布洛卡 . 我想知道这是否是一个众所周知的问题,并且已经有了一个“最佳实践”的解决方案。谢谢!

    3 回复  |  直到 15 年前
        1
  •  1
  •   Klaim    15 年前

    我想实施 作为类本身的查找表,但是 循环表的内容是 稍微加上 块A的初始化,它可以 将表解耦并非易事 从布洛克A(它仍然可行,但是 不是首选)。

    不能简单地使bloca初始化查找表所有者对象吗?它将是一个单独的类(如果在您的例子中是正确的话),以确保它是唯一访问初始化(构造?)的类。功能。

        2
  •  1
  •   Karel Petranek    15 年前

    我不知道是否有一个通用的解决方案,但肯定有一个通用的建议: tell, don't ask .

    据我所见,你正试图访问 BlockA 存储在查找表中,然后对其执行一些操作。这违反了封装原则,只有保存数据的对象才能访问和修改数据。

    更好的方法是将查阅表格功能提取到类中,并为所有三个块添加通用方法。然后创建查找表类的三个子类,并添加仅由特定块使用的方法(如果有任何此类方法)。在 布洛卡 , BlockB 和 BlockC 使用这些类。这允许比直接访问存储在 布洛卡 .

        3
  •  0
  •   pyfunc    15 年前

    在当前机制下,BlockB和BlockC使用BlockA中提供的设施。我的理解是它使它不同于布洛克。他们没有达到标准。

    blocka、blockb、blockc继承mytop的方法。

    1. 所以lookuptable()是mytop的一个方法。
    2. 它应该访问一个对象属性,该属性只有在实例化blocka时才会初始化。