Char * strcpy (char * strDest, const char * strSrc) class String {public: String (const char * str = NULL ); // String (const String & another); // copy the constructor ~ String (); // destructor String & operator = (const String & rhs); // value assignment operator private: char * m_data ;}; char * strcpy (char * strDest, const char * strSrc) {if (strDest = NULL | strSrc = NULL) {return NULL;} if (strDest = strSrc) {return strDest ;} char * strResult = strDest; while (* strDest ++ = * strSrc ++ )! = '\ 0'); return strResult;} String: String (const char * str) {if (str = NULL) {m_data = new char (1 ); m_data [0] = '\ 0';} else {m_data = new char (strlen (str) + 1); strcpy (m_data, str) ;}} String :: string (const String & another) {m_data = new char (strlen (another. m_data) + 1); strcpy (m_data, another. m_data);} String & String: operator = (const String & rhs) {if (& rhs = this) {return * this;} delete [] m_data; m_data = new char (strlen (r Hs. m_data) + 1); strcpy (m_data, rhs. m_data); return * this;} String ::~ String () {delete [] m_data;} String & String: operator = (const String & rhs) {if (this = & rhs) {return * this ;} delete [] m_data; m_data = new char [strlen (rhs. m_data) + 1]; strcpy (m_data, rhs. m_data); return * this ;}