Source of copyConstructor.cpp


  1: //  Created by Frank M. Carrano and Timothy M. Henry.
  2: //  Copyright (c) 2017 Pearson Education, Hoboken, New Jersey.

  4: template<class ItemType>
  5: LinkedBag<ItemType>::LinkedBag(const LinkedBag<ItemType>& aBag)
  6: {
  7:         itemCount = aBag.itemCount;
  8:    Node<ItemType>* origChainPtr = aBag.headPtr;  // Points to nodes in original chain
  9:    
 10:    if (origChainPtr == nullptr)
 11:       headPtr = nullptr;  // Original bag is empty
 12:    else
 13:    {
 14:       // Copy first node
 15:       headPtr = new Node<ItemType>();
 16:       headPtr->setItem(origChainPtr->getItem());
 17:       
 18:       // Copy remaining nodes
 19:       Node<ItemType>* newChainPtr = headPtr;      // Points to last node in new chain
 20:       origChainPtr = origChainPtr->getNext();     // Advance original-chain pointer
 21:       
 22:       while (origChainPtr != nullptr)
 23:       {
 24:          // Get next item from original chain
 25:          ItemType nextItem = origChainPtr->getItem();
 26:          
 27:          // Create a new node containing the next item
 28:          Node<ItemType>* newNodePtr = new Node<ItemType>(nextItem);
 29:          
 30:          // Link new node to end of new chain
 31:          newChainPtr->setNext(newNodePtr);
 32:          
 33:          // Advance pointer to new last node
 34:          newChainPtr = newChainPtr->getNext();
 35:          
 36:          // Advance original-chain pointer
 37:          origChainPtr = origChainPtr->getNext();
 38:       }  // end while
 39:       
 40:       newChainPtr->setNext(nullptr);              // Flag end of new chain
 41:    }  // end if
 42: }  // end copy constructor