Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Language = C++ Overloading operators 1. Implement the addition assignment ( += ) operator as a member function of the List class that takes a

Language = C++

Overloading operators

1. Implement the addition assignment (+=) operator as a member function of the List class that takes a data pointer as a parameter and adds it to the List object as a new element. Note: You must reuse existing code as much as possible. You must enable cascading where applicable!

2. Implement the addition (+) operator as a member function of the List class. This function takes a data pointer as a parameter and creates a new list comprised of all the elements of the List object as well as the new data element. You must reuse an existing overloaded operator here. Be careful what your member function returns! What does integer addition return?

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

#include

using namespace std;

#include "List.h"

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

List::~List()

{

cleanup();

}

// Adds a student to the front of the list

void List::addFront(Student* newStu)

{

Node* tmpNode = new Node;

tmpNode->data = newStu;

tmpNode->prev = 0;

tmpNode->next = 0;

if (head == 0) {

head = tmpNode;

tail = tmpNode;

return;

}

tmpNode->next = head;

head->prev = tmpNode;

head = tmpNode;

}

// Adds a student in alphabetical order

void List::addAlpha(Student* newStu)

{

Node* tmpNode = new Node;

tmpNode->data = newStu;

tmpNode->next = 0;

tmpNode->prev = 0;

if (head == 0) {

head = tmpNode;

tail = tmpNode;

return;

}

Node *currNode, *prevNode;

prevNode = 0;

currNode = head;

while (currNode != 0) {

if (currNode->data->getName() > tmpNode->data->getName())

break;

prevNode = currNode;

currNode = currNode->next;

}

if (currNode == head) { // add to first position

currNode->prev = tmpNode;

tmpNode->next = currNode;

head = tmpNode;

}

else if (currNode == 0) { // add to last position

prevNode->next = tmpNode;

tmpNode->prev = prevNode;

tail = tmpNode;

}

else { // add in the middle

tmpNode->next = currNode;

tmpNode->prev = prevNode;

prevNode->next = tmpNode;

currNode->prev = tmpNode;

}

}

void List::print() const

{

Node* currNode = head;

if (currNode == 0) return;

do {

currNode->data->print();

currNode = currNode->next;

} while (currNode != 0);

}

void List::printBack() const

{

Node* currNode = tail;

if (currNode == 0) return;

do {

currNode->data->print();

currNode = currNode->prev;

} while (currNode != 0);

}

void List::cleanupData()

{

Node *currNode = head;

while (currNode != 0) {

delete currNode->data;

currNode = currNode->next;

}

}

void List::cleanup()

{

Node *currNode, *nextNode;

currNode = head;

while (currNode != 0) {

nextNode = currNode->next;

delete currNode;

currNode = nextNode;

}

head = tail = 0;

}

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

#ifndef LIST_H #define LIST_H

#include "Student.h"

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

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

private: Node* head; Node* tail; void cleanup(); };

#endif

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

#include using namespace std; #include #include #include

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

int main() { List list1, list2; Student* stuPtr; string name, number;

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

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

cout << "ADD FRONT FORWARD" << endl; list1.print(); cout << "ADD FRONT BACKWARD" << endl; list1.printBack(); cout << "ADD ALPHA FORWARD" << endl; list2.print();; cout << "ADD ALPHA BACKWARD" << endl; list2.printBack();;

list1.cleanupData();

}

----------------------------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--------------------------------

100567899 Matilda 100234555 Joe 100456777 Timmy 100333222 Clayton 100999888 Harold

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Fundamentals Of Database Systems

Authors: Ramez Elmasri, Sham Navathe

4th Edition

0321122267, 978-0321122261

More Books

Students also viewed these Databases questions