Странный конструктор копирования для двусвязного списка - PullRequest
2 голосов
/ 14 ноября 2011

Обратите внимание на мой тег домашней работы. Как и во всех домашних заданиях, полезны советы по прямым ответам на реальное кодирование. Не стесняйтесь прямо сейчас ответить на любой из моих концептуальных вопросов.

Здравствуйте,

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

Он предоставляет нам файлы заголовков, для которых мы затем должны создать класс, и должен отлично следовать файлу заголовков. То, как он делает свой конструктор копирования , заключается в том, что он заставляет нас написать вспомогательную функцию, которую мы просто вызываем конструктором копирования.

Я могу сделать это легко, в обычном случае, но на этот раз он дал нам очень странную подпись для вспомогательной функции:

// copys chain at oldHead to newHead.
static void copy(Elem *&newHead, const Elem *oldHead)

Это скопировать цепочку структур под названием Elems:

struct Elem 
{
    Information info;
    Elem *next;
    Elem *back;
};

Полагаю, меня больше всего смущает вопрос о том, что весь Элем * и бизнес, потому что, насколько я помню, не & и * не отменяем друг друга?

Спасибо, любая помощь очень ценится! Надеюсь, в будущем это поможет другим людям, занимающим мою должность:)

1 Ответ

2 голосов
/ 14 ноября 2011
static Elem* copy(const Elem *oldHead)

Возможно, это была потенциальная функция. Вы берете старую Голову и возвращаете новую клонированную Голову.

То, что он выбрал, передает указатель по ссылке.

Если бы это было просто

static void copy(Elem * newHead, const Elem *oldHead)
{
    newHead = new Elem();
}

что-то вроде выше. Любые изменения в newHead не видны снаружи функции.

Это то же самое ниже. х передается по значению. Любые изменения x будут забыты после возврата из функции Addten . Ваш х просто указатель.

   void Addten( int x )
    {
       x = x + 10;
    }

    int x = 10;
    Addten( x );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...