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

C++ 将父类传递给另一个类的构造函数,c++,class,parent,decoupling,C++,Class,Parent,Decoupling,我的应用程序中有几个类,我希望将类之间的交互限制在基类内。为了使它具体化,现在我想做如下事情: class A { data public: void method(); }; class A_child : public A { //stuff }; class B { public: B(class A *a); }; class B_chil

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

    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_子类的父类传递给B或B_子类的构造函数

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

   class B_child : public B
   {
   public:
        B_child(class A_child *a_child);
        B_method();
   };
而不是我上面所说的,因为这似乎意味着B_child必须与A_child而不是A_child一起工作。虽然这是真的,但B或B_child工作的材料中没有任何东西需要A_child——A而不是A_child中的数据就足够了

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


谢谢。

如果
B\u child
构造函数接受
A*
,您可以将
A\u child*
传递给它,因为
A\u 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();
}

这里到底有什么问题?“我怎样才能使B_-child在构造函数中取A*?”如果是这样,我看不出是什么阻止了你。
B_-child(类A*A)在那里做什么?这不是法律法规。你是说常数吗<代码>B_子项(A*A)也是合法的。@MattPhillips,它就像结构A*A
(基本上是C)@克里斯,好的,谢谢,我纠正了。