Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Create an implementation file (myString.cpp) in C++ for the following header (myString.h) and test file (test.cpp). HEADER FILE: class myString { public: myString(const char *charString

Create an implementation file (myString.cpp) in C++ for the following header (myString.h) and test file (test.cpp).

HEADER FILE:

class myString

{

public:

myString(const char *charString = ""); //links to pointer

myString(const myString &other); //copy const - only has one arg. and is passed by ref.

void operator = (const myString &other); //assignment operator

~myString(); //destructor is preceded by ~

int getLength() const; //returns length

char operator [ ] (int n) const; // will take int locations and return a char from string

void clear(); // makes head null

void showStructure() const; //print string

myString toupper() const; //convert a -> A

myString tolower() const; //conver A->a

bool operator == (const myString& other) const; //equal length

bool operator < (const myString& other) const; //less than length

bool operator > (const myString& other) const; //greater length

private:

// Data members

int myStringSize;

char *Arr;

// myString input/output

friend istream & operator >> (istream& input, myString& inputmyString); //can access private data members

friend ostream & operator << (ostream& output, const myString& outputmyString); //friend only in h file purpose is to outputstring

};

#endif

TEST FILE:

#include

#include "myString.h"

//--------------------------------------------------------------------

//

// Function prototype

void copyTester(myString copymyString); // copymyString is passed by value

void print_help();

//--------------------------------------------------------------------

int main()

{

myString a("a"), // Predefined test myString objects

alp("alp"),

alpha("alpha"),

epsilon("epsilon"),

empty,

assignmyString, // Destination for assignment

inputmyString; // Input myString object

int n; // Input subscript

char ch, // Character specified by subscript

selection; // Input test selection

// Get user test selection.

print_help();

// Execute the selected test.

cin >> selection;

cout << endl;

switch (selection)

{

case '1':

// Test 1 : Tests the constructors.

cout << "Structure of various myString objects: " << endl;

cout << "myString object: alpha" << endl;

alpha.showStructure();

cout << "myString object: epsilon" << endl;

epsilon.showStructure();

cout << "myString object: a" << endl;

a.showStructure();

cout << "empty myString object" << endl;

empty.showStructure();

break;

case '2':

// Test 2 : Tests the length operation.

cout << "Lengths of various myString object:" << endl;

cout << " alpha : " << alpha.getLength() << endl;

cout << " epsilon : " << epsilon.getLength() << endl;

cout << " a : " << a.getLength() << endl;

cout << " empty : " << empty.getLength() << endl;

break;

case '3':

// Test 3 : Tests the subscript operation.

cout << "Enter a subscript : ";

cin >> n;

ch = alpha[n];

cout << " alpha[" << n << "] : ";

if (ch == '\0')

cout << "\\0" << endl;

else

cout << ch << endl;

break;

case '4':

// Test 4 : Tests the assignment and clear operations.

cout << "Assignments:" << endl;

cout << "assignmyString = alpha" << endl;

assignmyString = alpha;

assignmyString.showStructure();

cout << "assignmyString = a" << endl;

assignmyString = a;

assignmyString.showStructure();

cout << "assignmyString = empty" << endl;

assignmyString = empty;

assignmyString.showStructure();

cout << "assignmyString = epsilon" << endl;

assignmyString = epsilon;

assignmyString.showStructure();

cout << "assignmyString = assignmyString" << endl;

assignmyString = assignmyString;

assignmyString.showStructure();

cout << "assignmyString = alpha" << endl;

assignmyString = alpha;

assignmyString.showStructure();

cout << "Clear assignmyString" << endl;

assignmyString.clear();

assignmyString.showStructure();

cout << "Confirm that alpha has not been cleared" << endl;

alpha.showStructure();

break;

case '5':

// Test 5 : Tests the copy constructor and operator= operations.

cout << "Calls by value:" << endl;

cout << "alpha before call" << endl;

alpha.showStructure();

copyTester(alpha);

cout << "alpha after call" << endl;

alpha.showStructure();

cout << "a before call" << endl;

a.showStructure();

a = epsilon;

cout << "a after call" << endl;

a.showStructure();

cout << "epsilon after call" << endl;

epsilon.showStructure();

break;

case '6':

// Test 6 : Tests toUpper and toLower

cout << "Testing toUpper and toLower."

<< "Enter a mixed case string: " << endl;

cin >> inputmyString;

cout << "Input string:" << endl;

inputmyString.showStructure();

cout << "Upper case copy: " << endl;

inputmyString.toUpper().showStructure();

cout << "Lower case copy: " << endl;

inputmyString.toLower().showStructure();

break;

case '7':

// Test 7 : Tests the relational operations.

cout << " left right < == > " << endl;

cout << "--------------------------------" << endl;

cout << " alpha epsilon " << (alpha

<< " " << (alpha == epsilon) << " "

<< (alpha>epsilon) << endl;

cout << " epsilon alpha " << (epsilon

<< " " << (epsilon == alpha) << " "

<< (epsilon>alpha) << endl;

cout << " alpha alpha " << (alpha

<< (alpha == alpha) << " " << (alpha>alpha) << endl;

cout << " alp alpha " << (alp

<< (alp == alpha) << " " << (alp>alpha) << endl;

cout << " alpha alp " << (alpha

<< (alpha == alp) << " " << (alpha>alp) << endl;

cout << " a alpha " << (a

<< (a == alpha) << " " << (a>alpha) << endl;

cout << " alpha a " << (alpha

<< (alpha == a) << " " << (alpha>a) << endl;

cout << " empty alpha " << (empty

<< (empty == alpha) << " " << (empty>alpha) << endl;

cout << " alpha empty " << (alpha

<< (alpha == empty) << " " << (alpha>empty) << endl;

cout << " empty empty " << (empty

<< (empty == empty) << " " << (empty>empty) << endl;

break;

default:

cout << "'" << selection << "' specifies an inactive or invalid test" << endl;

}

return 0;

}

//--------------------------------------------------------------------

void copyTester(myString copymyString)

// Dummy routine that is passed a myString object using call by value. Outputs

// copymyString and clears it.

{

cout << "Copy of myString object" << endl;

copymyString.showStructure();

cout << "Clear copy" << endl;

copymyString.clear();

copymyString.showStructure();

}

//--------------------------------------------------------------------

void print_help()

{

cout << endl << "Tests:" << endl;

cout << " 1 Tests the constructors" << endl;

cout << " 2 Tests the length operation" << endl;

cout << " 3 Tests the subscript operation" << endl;

cout << " 4 Tests the assignment and clear operations" << endl;

cout << " 5 Tests the copy constructor and operator= operations" << endl;

cout << " 6 Tests the toUpper and toLower operations " << endl;

cout << " 7 Tests the relational operations " << endl;

cout << "Select the test to run : "<

}

PLEASE INCLUDE COMMENTS IN THE IMPLEMENTATION FILE CODE.

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

Logidata+ Deductive Databases With Complex Objects Lncs 701

Authors: Paolo Atzeni

1st Edition

354056974X, 978-3540569749

More Books

Students also viewed these Databases questions

Question

LOQ 14-4: What developmental stages did Freud propose?

Answered: 1 week ago