在哪里放置将由班级和班级成员使用的共同功能?

时间:2018-06-07 07:16:25

标签: c++ methods composition

例如,

class B {
  int* b1;
  int* b2;
  B(int* x, int* y) {
     b1 = x;
     b2 = y;
  }

};

class A {
  int* a1;
  int* a2;
  B* b1;
  public:
  A() {
    a1 = new int;
    a2 = new int;
    b1 = new B1(a1, b1);
  }
};

我想从A类和A类的对象中访问a1和a2指向的值。 B.我应该为它编写函数,以便A的对象和B的对象可以调用这个函数吗?

2 个答案:

答案 0 :(得分:1)

你可以把这些课的朋友反之亦然。 look here

这允许成员和方法的“交叉使用”

如果您只想要一个功能同时访问A和B的私有成员和方法,您可以为这个特定功能提供帮助。

答案 1 :(得分:1)

在这个特殊的上下文中,您只传递指针,因此a1a2 指向的对象b1和{{1}指向的对象}}。另一方面,b2对象知道它包含的A,但B的实例不知道是否包含在B中。

因此,我认为操纵指向对象的函数应该在A类中声明。然后,如果B的存在是A的公共API的成员(例如,使用getter)就足够了:

B

如果class B { ... void do_something(...) { // do something with objects pointed by b1 and b2 } }; ... A a; a.getB()->do_something(); ... 的{​​{1}}成员是实施细节,您应该在A中声明一个中继方法:

B