Может ли класс иметь член своего собственного типа? - PullRequest
2 голосов
/ 27 июня 2011

Чтобы эмулировать отношение включения, в котором объекты содержат другие экземпляры того же типа, я могу определить класс как таковой?

class RussianDoll {

    string name;
    RussianDoll doll;

    RussianDoll();
}

Как мне построить конструктор (ы) для этого класса

Ответы [ 3 ]

4 голосов
/ 27 июня 2011

Может ли класс иметь член своего типа?

Конечно. Это на самом деле довольно часто. Подумайте о случае узла в связанном списке, например:

class Node {
    Node next;
    int value;
}

1012 *
*

Как мне построить конструктор (ы) для этого класса?

У вас есть несколько вариантов (см. Ниже). Очевидно, вам следует избегать создания новых экземпляров класса при каждом вызове конструктора, так как это приведет к бесконечной рекурсии.

  • Вы можете взять Node в качестве аргумента и инициализировать его как

    this.next = nextArg;
    
  • Вы можете инициализировать его нулевой ссылкой

    this.next = null;
    
  • Вы можете инициализировать его как this

    this.next = this;
    

(Как правило, создавать конструктивный граф объекта внутри конструктора - это плохая идея, так что в любом случае я бы об этом не беспокоился: -)

2 голосов
/ 27 июня 2011

Конечно, а почему нет?До тех пор, пока вы не создаете его на неопределенный срок.

class RussianDoll {
    RussianDoll parentDoll;

    RussianDoll(RussianDoll parentDoll) {
       this.parentDoll = parentDoll;
    }
}
1 голос
/ 27 июня 2011

Да.
Типичным примером этого является связанный список.

Однако вы не можете безоговорочно создать дочерний элемент в конструкторе или создадите бесконечное количество объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...