Listing 2

#include <stdio.h>
#include <string.h>

class String
   {
public:
   String(const char *s)
      {
      len = strlen(s);
      str = strcpy(new char[len + 1], s);
      }
   String(const String &s)
      {
      len = s.len;
      str = strcpy(new char[len + 1], s.str);
      }
   ~String(){ delete str; }
   size_t length() { return len; }
   const char *text() { return str; }
   void cat(char c)
      {
      char *p = strcpy(new char[len + 2], str);
      p[len++] = c;
      p[len] = '\0';
      delete str;
      str = p;
      }
private:
   size_t len;
   char *str;
   };

int main()
   {
   String s1("hello");
   String s2(s1);
   printf("s1 = %s\n", s1.text());
   printf("s2 = %s\n", s2.text());
   s1.cat('!');
   printf("s1 = %s\n", s1.text());
   printf("s2 = %s\n", s2.text());
   return 0;
   }
// End of File