0

我的应用程序中有几个类,我想将类之间的交互限制在基类中。为了具体化,现在我想做这样的事情:

    class A
    {
    data 

    public:
       void method();
    };

    class A_child : public A
    {
    //stuff
    };

    class B 
    {
    public:
        B(class A *a);
    };
   class B_child : public B
   {
   public:
        B_child(class A *a);
        B_method(); // does some stuff with data in A and B.
   };

虽然实际上每个类都有单独的头文件,所以有很多来回包含......

在 A_child 的 cpp 文件中,我希望能够使用 B_child(或 B,就此而言)。但我不知道如何避免不得不调用类似的东西

void A_child::method()
{
   // stuff

    B_child *example_B;
    example_B = new B_child(this);
    example_B->B_method();

  // more stuff
}

它不一定是

example_B = new B_child(this);

必然地,它只是必须有某种方式将 A_child 的父类传递给 B 或 B_child 的构造函数。

我想做的是避免将 B_child 定义为:

   class B_child : public B
   {
   public:
        B_child(class A_child *a_child);
        B_method();
   };

而不是我上面所说的,因为这似乎暗示 B_child 必须与 A_child 一起工作而不是与 A 一起工作。虽然这是真的,但 B 或 B_child 使用的材料中没有任何内容需要 A_child - A 中的数据,不是 A_child,就足够了。

我猜有没有办法在 C++ 中做到这一点?有人可以给我一个例子来说明这样的事情是如何工作的,或者一个指向可能解释如何做到这一点的页面的链接?

谢谢。

4

2 回答 2

0

如果B_child构造函数采用 a A *,则可以将 an 传递A_child *给它,因为A_child“is-an” A(通过公共继承)。您是否尝试这样做并遇到错误?

于 2013-06-06T20:20:22.490 回答
0

您可以在类中添加parent字段A

class A {
  B_child* parent;
public:
  void setParent(B_child* p) {
    parent = p;
  }
}

构造函数中的下一个B_child

B_child::B_child(A* a) {
  // stuff
  a->setParent(this);
}

然后您访问方法parent内部的对象A_child

void A_child::method() {
  if(parent)
    parent->B_method();
}
于 2013-06-06T20:29:12.807 回答