我在类层次结构中有两个类,其中父类需要具有从其派生的类的实例作为成员变量。举个例子:
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等)的面向对象的层次结构:
最佳答案
除了编码方面的考虑之外,从概念的 Angular 来看,这些语句是否真的有意义? MethodTable是否应该具有自己的MethodTable,然后又具有自己的MethodTable ...等?
我想这听起来像是您需要稍微重构一下概念。例如,也许对象本身应该以某种方式负责公开其MethodTable成员的必要部分。因此,不需要MethodTable本身就是对象。 (可能还有其他各种可行的设计。如果不更深入地了解实际项目,很难说。)
关于c++ - 父类中子类的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4289111/