我在类层次结构中有两个类,其中父类需要具有从其派生的类的实例作为成员变量。举个例子:

class B;

class A {
public:
    B* binst;

    A();
};

class B : public A {
};

A::A() {
    binst = new B;
}

显然,这会导致构造函数的无限递归,因为要创建一个新的B,您必须调用A的构造函数,这将创建一个新的B,该新的B调用A的构造函数,因此是无限的。

有没有解决的办法?我遇到的问题是A必须在其中包含B,但是B必须从A派生,并且没有办法防止这种情况。

为了弄清楚为什么我需要这样做,请考虑脚本语言(例如python或ruby或lua等)的面向对象的层次结构:
  • 任何对象的所有实例都派生自基类Object。
  • 对象具有方法查找表,该表是MethodTable的实例。
  • MethodTable派生自Object,并且必须如此,脚本语言才能对其进行操作。
  • 最佳答案

  • “对象具有方法查找表”
  • “MethodTable派生自对象”

  • 除了编码方面的考虑之外,从概念的 Angular 来看,这些语句是否真的有意义? MethodTable是否应该具有自己的MethodTable,然后又具有自己的MethodTable ...等?

    我想这听起来像是您需要稍微重构一下概念。例如,也许对象本身应该以某种方式负责公开其MethodTable成员的必要部分。因此,不需要MethodTable本身就是对象。 (可能还有其他各种可行的设计。如果不更深入地了解实际项目,很难说。)

    关于c++ - 父类中子类的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4289111/

    10-10 00:40