2011-06-27 64 views
2

为了模拟包含相同类型的其他实例的对象关系,我可以定义一个类吗?一个班级可以拥有自己类型的成员吗?

class RussianDoll { 

    string name; 
    RussianDoll doll; 

    RussianDoll(); 
} 

我该如何构建这个类的构造函数?

+2

答案取决于所使用的语言。 –

+0

@Ignacio哪些语言不允许这样做? – Dunes

+0

谢谢大家。 –

回答

4

一个类可以有自己类型的成员吗?

当然可以。这其实很常见。在例如链表想想一个节点的情况下:

class Node { 
    Node next; 
    int value; 
} 


我应该如何建立这个类的构造函数(S)?

你有几个选择(见下文)。您显然应该避免在构造函数的每次调用中创建类的新实例,因为这会导致无限递归。

  • 你可以采取一个Node作为参数并初始化它像

    this.next = nextArg; 
    
  • 你可以将其初始化为空引用

    this.next = null; 
    
  • 你可以将它初始化为this

    this.next = this; 
    

(它通常是一个坏主意,以创建一个构造函数里面整个对象图中的任何方式,所以我不会担心这个反正:-)

2

当然,为什么不呢?只要你没有无限制地实例化它。

class RussianDoll { 
    RussianDoll parentDoll; 

    RussianDoll(RussianDoll parentDoll) { 
     this.parentDoll = parentDoll; 
    } 
} 
1

是的。
这是一个常见的例子是一个链表。

但是,您不能无条件地在构造函数中创建子项,否则您将创建无限数量的对象。

相关问题