Question: C++ language Copying the List a. Write a copy constructor for the List class. Think very carefully about what it means to copy a linked

C++ language

Copying the List

a. Write a copy constructor for the List class. Think very carefully about what it means to copy a linked list. Does it make sense to copy the nodes or to make brand new nodes? Do not copy the data.

b. Think about how you can test the copy constructor, so that you are sure that it works for every case. Implement a global function that reads Student data from the user, adds it to a list, and makes a copy of the list using the copy constructor. It will then make different changes (add or remove) to the original list and to the copy, and print each list. Make sure that changes to the original list do not change the copy, and vice-versa!

----------------------------list.cc--------------------------------------------

#include using namespace std;

#include "List.h"

List::List() : head(0) { }

List::~List() { Node *currNode, *nextNode;

currNode = head;

while (currNode != 0) { nextNode = currNode->next; delete currNode; currNode = nextNode; } }

// Adds a student to the front of the list

void List::addFront(Student* newStu) { Node* tmpNode = new Node; tmpNode->data = newStu;

tmpNode->next = head; head = tmpNode; }

// Adds a student in alphabetical order

void List::addAlpha(Student* newStu) { Node* tmpNode = new Node; tmpNode->data = newStu; tmpNode->next = 0;

Node *currNode, *prevNode;

currNode = head;

prevNode = 0;

while (currNode != 0) { if (currNode->data->getName() > tmpNode->data->getName()) break; prevNode = currNode; currNode = currNode->next; }

if (prevNode == 0) { head = tmpNode; } else { prevNode->next = tmpNode; } tmpNode->next = currNode; }

void List::print() const { Node* currNode = head;

if(currNode == 0) { cout<<" ERROR: List is empty."; return; }

do { currNode->data->print(); currNode = currNode->next; } while (currNode != 0);

}

----------------------------list.h--------------------------------------------

#ifndef LIST_H #define LIST_H

#include "Student.h"

class List { class Node { friend class List; private: Student* data; Node* next; };

public: List(); ~List(); void addFront(Student*); void addAlpha(Student*); void print() const;

private: Node* head; };

#endif

----------------------------main.cc--------------------------------------------

#include using namespace std; #include #include

#include "Student.h" #include "List.h"

int main() { ifstream infile("stu.txt",ios::in); if (!infile) { cout<<"could not open file"< exit(1); }

List comp2404, comp2404two;

cout << endl << "EMPTY LIST: " << endl; comp2404.print();

Student* stuPtr; string name, number;

while (infile >> number >> name) { stuPtr = new Student(number, name); comp2404.addFront(stuPtr); comp2404two.addAlpha(stuPtr); }

cout << endl << "ADDED TO FRONT: " << endl; comp2404.print();

cout << endl << "ADDED IN ALPHABETICAL ORDER: " << endl; comp2404two.print();

return 0; }

----------------------------student.cc--------------------------------------------

#include using namespace std; #include

#include "Student.h"

Student::Student(string nu, string na) : number(nu), name(na) { }

Student::~Student() { }

string Student::getName() const { return name; }

void Student::setName(string n) { name = n; }

void Student::print() const { cout<<"Student: "<

----------------------------student.h--------------------------------------------

#ifndef STUDENT_H #define STUDENT_H

class Student { public: Student(string="000000000", string=""); ~Student(); string getName() const; void setName(string); void print() const;

private: const string number; string name; };

#endif

-----------------stu.txt--------------------------------

00567899 Matilda 100234555 Joe 100456777 Timmy 100333222 Clayton 100999888 Harold

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!