Question: C++ Convert the class that you wrote in your previous assignment to template. Test the template with dynamic arrays of integers and dynamic array of

C++

Convert the class that you wrote in your previous assignment to template.

Test the template with dynamic arrays of integers and dynamic array of strings.

#include #include #include

using namespace std;

class DynamicStringArray { public: DynamicStringArray(); DynamicStringArray(const DynamicStringArray& o); ~DynamicStringArray(); DynamicStringArray& operator = (const DynamicStringArray& r);

void addEntry(string newEntry); bool deleteEntry(string newEntry); string getEntry(int index); int getSize();

private: string *dynamicArray; int size; };

DynamicStringArray::DynamicStringArray() { dynamicArray = NULL; size = 0; }

DynamicStringArray::DynamicStringArray(const DynamicStringArray& o) { size = o.size;

if (size == 0) { dynamicArray = NULL; } else { dynamicArray = new string[size];

for (int i = 0; i < size; i++) { dynamicArray[i] = o.dynamicArray[i]; } } }

DynamicStringArray& DynamicStringArray::operator =(const DynamicStringArray& r) { if (dynamicArray != NULL) { delete[] dynamicArray; }

if (r.size == 0) { size = 0; dynamicArray = NULL; } else { size = r.size; dynamicArray = new string[size];

for (int i = 0; i < size; i++) { dynamicArray[i] = r.dynamicArray[i]; } }

return *this; }

DynamicStringArray::~DynamicStringArray() { if (dynamicArray != NULL) delete[] dynamicArray; }

int DynamicStringArray::getSize() { return size; }

void DynamicStringArray::addEntry(string newEntry) { string *newArray = new string[size + 1];

for (int i = 0; i < size; i++) { newArray[i] = dynamicArray[i]; }

delete[] dynamicArray; dynamicArray = newArray; newArray[size++] = newEntry; }

bool DynamicStringArray::deleteEntry(string entry) { string *result = NULL; int pos = -1;

for (int i = 0; (i < size) && (pos == -1); i++) { if (dynamicArray[i] == entry) { pos = i; } }

if (pos == -1) { return false; }

if (size > 1) { result = new string[size - 1]; }

for (int i = 0, j = 0; i < size; i++) { if (i != pos) { result[j++] = dynamicArray[i]; } }

size--; delete[] dynamicArray; dynamicArray = result;

return true; }

string DynamicStringArray::getEntry(int index) { if ((index < 0) || (index >= size)) return NULL; return dynamicArray[index]; }

Your assignment will be tested with the following main function:

int main() { DynamicArray names;

// List of names names.addEntry("Frank"); names.addEntry("Wiggum"); names.addEntry("Nahasapeemapetilon"); names.addEntry("Quimby"); names.addEntry("Flanders");

// Output list cout << "List of names:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

// Add and remove some names names.addEntry("Spuckler"); cout << "After adding a name:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

names.deleteEntry("Nahasapeemapetilon"); cout << "After removing a name:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

names.deleteEntry("Skinner"); cout << "After removing a name that isn't on the list:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

names.addEntry("Muntz"); cout << "After adding another name:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

// Remove all of the names by repeatedly deleting the last one while (names.getSize() > 0) { names.deleteEntry(names.getEntry(names.getSize() - 1)); }

cout << "After removing all of the names:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

names.addEntry("Olivia"); cout << "After adding a name:" << endl; for (int i = 0; i < names.getSize(); i++) cout << names.getEntry(i) << endl; cout << endl;

cout << "Testing copy constructor" << endl; DynamicArray names2(names); // Remove Olivia from names names.deleteEntry("Olivia"); cout << "Copied names:" << endl; for (int i = 0; i < names2.getSize(); i++) cout << names2.getEntry(i) << endl; cout << endl;

cout << "Testing assignment" << endl; DynamicArray names3 = names2; // Remove Olivia from names2 names2.deleteEntry("Olivia"); cout << "Copied names:" << endl; for (int i = 0; i < names3.getSize(); i++) cout << names3.getEntry(i) << endl; cout << endl;

cout << "Testing dynamic array of ints" << endl; DynamicArray nums; nums.addEntry(10); nums.addEntry(20); nums.addEntry(30); for (int i = 0; i < nums.getSize(); i++) cout << nums.getEntry(i) << endl; cout << endl;

cout << "Enter a character to exit." << endl; char wait; cin >> wait; return 0; }

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!