设计以访问对象所有者的元素

时间:2016-12-23 10:04:51

标签: c++ design-patterns

我们说我有两节课:

Class A {
  B b;
  Foo bar;
}

Class B {
// some stuff
}

由于类型A的对象拥有类型B的对象,因此可以通过A访问B的某些内容。如果类型B的对象必须能够访问它,那将是一个好的设计。对象(A型)?例如。如果我有一个B类型的对象,并希望得到它所属的对象的条形值。

每次创建B时添加对A到B的引用是不错的做法?还是某种委托模式?

3 个答案:

答案 0 :(得分:1)

正常的方法是在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;
};

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果A取决于B而B同时取决于A,则称为循环依赖。它表明设计不好,但正如我所经历的那样,你有时可以避免它。

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

如果您有包含问题,请使用"转发声明"在B&#39的头文件中声明A.