” Define a class named MyString to define the string type (i.e. a sequence of characters) based on the following specification: 1. This class declares two attributes to represent a string in memory: a character pointer that holds the start address of the string in memory and an integer that holds the length of the string. NOTE This is not a null-terminated string: do not assume any null character showing the end of a string in memory. 2. This class uses dynamic allocation to prevent wasting memory. In other words, a string including the word “hello” will take only 5 bytes for its characters and no more byte is reserved or wasted. Try to Answer: • How many bytes are taken by a My String object based on this implementation? • How many bytes are wasted? • How many bytes are you using for your real data? • How many overhead bytes are you considering? 3. The default constructor of this class creates a null string object. 4. Overload the constructor to make it possible to create a string object initialized from a C-String. 5. Define a Copy Constructor to create a My String object initialized by another My String object. 6. Define a destructor for this class to release the dynamically-allocated memory. 7. Define a member function to return the length (i.e. the number of characters) of the My String object. 8. Define a member function to return a C-String representation of the My String object. 9. Define a member function to reverse the order of the characters included in a MyString object.