â—Ź (80 points) Re-write the String class from homework 3, but use a singly-linked list as the representation. Like last week, these strings will be of varying lengths and must grow and shrink as necessary. Implement all the appropriate methods given below.
â—Ź Class String declaration:
class String
{
public:
/// Both constructors should construct
/// from the parameter s
String( const char * s = “”);
String( const String & s );
String operator = ( const String & s );
char & operator [] ( const int index );
int length() const;
int indexOf( char c ) const;
bool operator == ( const String & s ) const;
/// concatenates this and s
String operator + ( const String & s ) const;
/// concatenates s onto end of this
String operator += ( const String & s );
void print( ostream & out );
void read( istream & in );
~String();
private:
bool inBounds( int i )
{
return i = 0 && i < length();
}
struct ListNode
{
char info;
ListNode * next;
ListNode(char newInfo, ListNode * newNext)
: info( newInfo ), next( newNext )
{
}
};
ListNode * head; // no other data members!!
};
ostream & operator << ( ostream & out, String str );
istream & operator ( istream & in, String & str );
â—Ź (10 points) Write a main function which tests each function defined in your class
String. You may use the same one from last week if you like, but notice I deleted
some of the methods.
â—Ź (10 points) Give an estimate of the relative efficiency of each of the following two
assignments (I mean how many function calls, how many copies are made, etc):
String s(“Hello”);
String t(“There”);
s = s + t;
s += t;
â—Ź Class String declaration:
class String
{
public:
/// Both constructors should construct
/// from the parameter s
String( const char * s = “”);
String( const String & s );
String operator = ( const String & s );
char & operator [] ( const int index );
int length() const;
int indexOf( char c ) const;
bool operator == ( const String & s ) const;
/// concatenates this and s
String operator + ( const String & s ) const;
/// concatenates s onto end of this
String operator += ( const String & s );
void print( ostream & out );
void read( istream & in );
~String();
private:
bool inBounds( int i )
{
return i = 0 && i < length();
}
struct ListNode
{
char info;
ListNode * next;
ListNode(char newInfo, ListNode * newNext)
: info( newInfo ), next( newNext )
{
}
};
ListNode * head; // no other data members!!
};
ostream & operator << ( ostream & out, String str );
istream & operator ( istream & in, String & str );
â—Ź (10 points) Write a main function which tests each function defined in your class
String. You may use the same one from last week if you like, but notice I deleted
some of the methods.
â—Ź (10 points) Give an estimate of the relative efficiency of each of the following two
assignments (I mean how many function calls, how many copies are made, etc):
String s(“Hello”);
String t(“There”);
s = s + t;
s += t;






