【问题标题】:Is there a way to make a class recursive?有没有办法让类递归?
【发布时间】:2019-07-04 08:41:42
【问题描述】:

所以我想创建一个类,它可以拥有一个类型本身的对象。 像这样的:

class foo {

    foo Avalue = foo();
    foo Bvalue = foo();

    foo(int a, int b) {
        Avalue = goo(a);
        Bvalue = goo(b);
    }

    foo(foo a, int b) {
        Avalue = foo(a);
        Bvalue = goo(b);
    }

    foo(foo a, foo b) {
        Avalue = foo(a);
        Bvalue = foo(b);
    }
}

class goo : foo {

    int value;
}

这样我就可以拥有一个始终以“goo”对象终止的递归对象。 有什么办法吗?

【问题讨论】:

  • 如果您有自己的实例,当您尝试创建第一个实例时会发生什么?它创建一个嵌套实例,然后该实例创建一个嵌套实例。什么时候停止?
  • 这个类的对象的大小是多少?无法计算,因此编译器不知道要分配多少内存。
  • 您实际上想用这种(不可能的)构造解决什么问题?

标签: c++ class recursion


【解决方案1】:

问题在于foo 中的foo 将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个@987654327 @ 将包含 foo 将包含 foo 将包含 foo 将包含 foo 将包含 foo 将包含 foo 将包含 foo其中将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个foo,其中将包含一个foo将包含一个 foo 将包含...

【讨论】:

    【解决方案2】:

    没有。这是根本不可能的。想一想:这个类将有无限的大小(好吧,除非它没有其他成员,我想,但是它有什么作用呢?),并且没有可证明的定义/身份。

    不过,您可以存储指向其他 foo 对象的指针。只要不是每个foo 都有一个确实 指向另一个foo 的成员指针,或者如果引用形成循环依赖关系,这就可以工作。无论哪种方式,编译器都不会按照您尝试的解决方案必须的方式进行诊断,但如果您不小心,您可能会在运行时发现问题。

    您的代码表明您正在实现一棵树。这就是std::map(通常是一棵树)动态创建其节点并用指针链接它们的原因(好吧,我想是其中之一)。每个链表实现也是如此。

    【讨论】:

    • 正如你所说,我确实想做一个树状结构,但我不明白为什么它会是无限的。一开始你会有一个foo 对象,它可以包含其他foo 对象或goo 对象,这些对象只能存储一个值而不能存储foo 对象的其他实例,它将停止递归行为。这意味着主对象将具有固定大小。
    • @1mp0551bl3 goo 包含 foo 包含的所有内容。这就是继承的本质。
    • S...对不起,我的错
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2019-09-10
    相关资源
    最近更新 更多