Listing 3

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

class String
   {
public:
   String(const char *s) { ... }
   String(const String &s) { ... }
   ~String() { delete str; }
   size_t length() { return len; }
   const char *text() { return str; }
   void cat(char c) { ... }
   char &sub(size_t i)
      {
      if (i > len)
         /* error */;
      return str[i];
      }
private:
   size_t len;
   char *str;
   };

int main()
   {
   size_t i;
   String s1("hello");
   String s2(s1);
   printf("s1 = %s\n", s1.text());
   printf("s2 = %s\n", s2.text());
   for (i = 0; i < s1.length(); ++i)
      s1.sub(i) = toupper(s1.sub(i));
   printf("s1 = %s\n", s1.text());
   printf("s2 = %s\n", s2.text());
   return 0;
   }
// End of File