【问题标题】:Design to access elements of object owner设计访问对象所有者的元素
【发布时间】:2017-05-09 00:43:39
【问题描述】:

假设我有两个类:

Class A {
  B b;
  Foo bar;
}

Class B {
// some stuff
}

由于 A 类型的对象拥有 B 类型的对象,A 可以访问 B 的某些内容。如果 B 类型的对象必须有权访问它的拥有对象(类型为一种)?例如。如果我有一个 B 类型的对象,并且想要获取它所属的对象的 bar 值。

每次创建 B 时向 B 添加对 A 的引用是一种好习惯吗?还是某种委托模式?

【问题讨论】:

  • 我确实给出了答案,但我认为它不符合要求。但是你能更详细地了解这些吗?真诚地提前投票。
  • 基本上,如果我有一个 B 类型的对象,我想问它“你有主人吗?如果有,他的‘bar’值是多少?”我需要一种优雅的方式来说明它所属的 B 类型的对象。

标签: c++ design-patterns


【解决方案1】:

如果 A 依赖 B 并且 B 同时依赖 A,这称为循环依赖。它表明设计不好,但正如我所经历的那样,您有时无法避免。

如果这是您将在大型项目中使用的最小化版本,我建议您考虑一下为什么 B 需要 A,因为 A 似乎是您的经理类。 并将 A 的共享部分移动到一个单独的类中,让我们将其称为 C 而不是将 C 传递给 B 而不是 A。

如果您遇到包含问题,请使用“前向声明”在 B 的头文件中声明 A。

【讨论】:

    【解决方案2】:

    通常的方法是在 B 类中使用父指针:

    class A {
     A():b(this){}
     B b;
     Foo bar;
    };
    
    class B {
     B(A *parent=0)
     :p_parten(parent){}
     // some stuff
     void func(){
        if (p_parent)
          p_parent->bar.something();
     }
     A *p_parent;
    };
    

    【讨论】:

      【解决方案3】:

      是的,只是想将指向 A 的引用或指针传递给 B 的构造函数。

      【讨论】:

        猜你喜欢
        • 2011-03-09
        • 1970-01-01
        • 2013-06-22
        • 1970-01-01
        • 2019-05-16
        • 2013-05-10
        • 2017-04-18
        • 2021-09-27
        • 2022-12-09
        相关资源
        最近更新 更多