将父类传递给另一个类的构造函数

Pass parent class to constructor of another class

本文关键字:构造函数 另一个 父类      更新时间:2023-10-16

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

    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++中做到这一点?有人能给我一个例子,如何像这样的工作或链接到一个页面,可能会解释如何做到这一点?

谢谢。

如果B_child构造函数接受一个A *,您可以传递一个A_child *给它,因为A_child"是一个"A(通过公共继承)。您是否尝试这样做并遇到错误?

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

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);
}

然后在A_child方法中访问parent对象:

void A_child::method() {
  if(parent)
    parent->B_method();
}