Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Help with this C++ coding, im using visual studio OOP, operator overloading, con

ID: 3852850 • Letter: H

Question

Help with this C++ coding, im using visual studio

OOP, operator overloading, constructors (copy constructor, default constructor etc.), destructors, ‘this’ pointer, friendship relation, and static variables.

String Class implementation. DO NOT USE/INCLUDE string type (e.g. #include <string>)

Objective: Learning design and use of object oriented programming, operator overloading, constructors (copy constructor, default constructor etc.), destructors, ‘this’ pointer, friendship relation, and static variables.

Input: String or strings (e.g. s1+s2 will return concatenation of strings s1 and s2)

Output: Required operations’ outputs e.g. s1>s2 returns true or false, s1[2] returns third char in string s1, s1.Length() returns length of s1 etc.

Project Description: You are required to create your own String class (Note: String class is different than built in string class) like string type in C++. This class should include following operations:

(10 Points) Separate specifications from implementation. Keep header file and class implementation in separate files.

(20 Points) Can initialize created object with a given string or given instance of the same class (use copy constructor)

(10 Points) Dynamically allocates memory for a given string (e.g. String s(“Joe”); in this case allocates 3 memory spaces for String class instance s)

(10Points) Returns string length if it is requested (e.g. s.Length())

(10 Points) Clears dynamically allocated memory for String object while destructing (do it in destructor)

(20 Points) Checks boundaries (e.g. if String s size is 10, s[11]= ‘A’; will display error message on screen)

(20 Points) In public section of the String class only include interfaces. All other variables and functions must be in private section.

(30 Points) Overloads + operator so that two string can be concatenated. (e.g. String s1,s2,s3; s3 = s1+s2; ) when only have s1+s2; concatenated string will be included in s1.

(30 Points) Overloads [ ] operator so that s[index] will be possible.

(30 Points) Compares two given objects (e.g. String a,b) a>b or a<b or a==b. To do that overload <,>,== operators

(30 Points) Copies one object to another (e.g. a=b or a=b=c) (overload ‘=’ operator for this purpose)

(20 Points) When required returns number of objects created so far. (e.g. String obj; obj.count()). Obj.count() returns total number of non-empty String objects).

(30 Points) Can get input from the istream class instance (e.g. cin>>s;). Make it friend of the String class.

(30 Points) Can output to the ostream class instance (e.g. cout<<s;). Make it friend of the String class.

You may use below given class definition as a reference. Complete code for IntArray class is given under Sample Codes folder in Blackboard.

class IntArray

{ private:

   int *aptr;                     // Pointer to the array    int arraySize;                 // Holds the array size    void subscriptError();         // Handles invalid subscripts public:

   IntArray(int);                 // Constructor

   IntArray(const IntArray &);    // Copy constructor

   ~IntArray();                   // Destructor

   

   int size() const               // Returns the array size       { return arraySize; }

    int &operator[](const int &); // Overloaded [] operator    friend ostream& operator <<(ostream& stream,IntArray ob); };

Explanation / Answer

#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include <string>
using namespace std;

class MyString
{
private:
char * strptr;
int len;
static int objcount;
public:
MyString(); //Default
MyString(MyString & rightside); //Copy Constructor
~MyString(); //Destructor
int getLength() const; //Method of getting the length
int getObjCount() const; //Method of getting number of objects created by class.
const char* getValue() const; //Returns the char array (string)
int str_len(char arr[]); //DIY string length function.
int str_cmp(char ar1[], char ar2[]); //returns an int based on comparsion of two arrays.
void str_cpy(char dest[], char src[]); //copy an array into another.
  
  
//Overloaded operators
const MyString operator=(MyString &rightside);
bool operator==(MyString &rightside);
bool operator!=(MyString &);
bool operator>(MyString &);
bool operator<(MyString &);
bool operator>=(MyString &);
bool operator<=(MyString &);
};
#endif

-----------------------------------------------------------------------------------------------------------------------------------------------------------


//Implementation file
#include "MyString.h"
//Default Constructor
MyString::MyString()
{
   int len;
   char * strptr;
   objcount++;
}
//Copy constructor
MyString::MyString(MyString & rightside)
{
   int i = 0;
   strptr = new char[rightside.getLength() + 1];
   str_cpy(strptr,rightside.getValue);
   len = rightside.getLength();
   objcount++;
}
//Destructor
MyString::~MyString()
{
   if (len != 0)
   {
       delete [] strptr;
   }
}
//Gets the length of the calling object.
int MyString::getLength() const
{
   return len;
}
//returns total number of non-empty String objects
int MyString::getObjCount() const
{
   return objcount;
}
//returns the value of the private char array(string).
const char * MyString::getValue() const
{
   return strptr;
}
const MyString MyString::operator=(MyString &rightside)
{
   if (len != 0)
       delete[] strptr;
   strptr = new char[rightside.getLength() + 1];
   str_cpy(strptr,rightside.getValue());
   len = rightside.getLength();
   return *this;
}
bool MyString::operator==(MyString &rightside)
{
   bool flag = false;
   for (int i = 0; i < rightside.getLength() + 1; i++)
   {
       if (strptr[i] != rightside.getValue[i])
       {
           flag = false;
       }
       else
       {
           flag = true;
       }
   }
   return flag;
}

bool MyString::operator!=(MyString &rightside)
{
   bool flag = true;
   for (int i = 0; i < rightside.getLength() + 1; i++)
   {
       if (strptr[i] != rightside.getValue[i])
       {
           flag = true;
       }
       else
       {
           flag = false;
       }
   }
   return flag;
}
bool MyString::operator>(MyString &rightside)
{
   bool status;
   if (this->operator==(rightside.getValue())> 0)
       status = true;
   else
       status = false;
   return status;
}
bool MyString::operator<(MyString &rightside)
{
   bool status;
   if (this->operator==(rightside.getValue())< 0)
       status = true;
   else
       status = false;
   return status;
}
bool MyString::operator>=(MyString &rightside)
{
   bool status;
   if (this->operator==(rightside.getValue()) >= 0)
       status = true;
   else
       status = false;
   return status;
}
bool MyString::operator<=(MyString &rightside)
{
   bool status;
   if (this->operator==(rightside.getValue()) <= 0)
       status = true;
   else
       status = false;
   return status;
}
int MyString::str_len(char arr[])
{
   int i = 0;
   while (arr[i] != '')
   {
       i++;
   }
   return i;
}
int MyString::str_cmp(char ar1[], char ar2[])
{
   int i = 0;
   while (true)
   {
       if (ar1[i] != ar2[i])
       {
           return ar1[i] - ar2[i];
       }
       else if ((ar1[i] == '') && (ar2[i] == ''))
       {
           return 0;
       }
       i++;
   }
}
void MyString::str_cpy(char dest[], char src[])
{
   int i = 0;
   while (src[i] != '')
   {
       dest[i] = src[i];
       i++;
   }
   dest[i] = '';
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote