### Example of the this Pointer

    /************************************************************************
    *

The following example shows code using class members without the this pointer. The comments on each line show the equivalent code with the hidden use of the this pointer.

                                                                            *
    ************************************************************************/

    // This example uses class members without the this pointer.

    #include <string.h>
    #include <iostream.h>
    class X
    {
          int len;
           char *ptr;
    public:
          int GetLen()          // int GetLen (X* const this)
          { return len; }       // { return this->len; }
          char * GetPtr()       // char * GetPtr (X* const this)
          { return ptr; }       // { return this->ptr; }
          X& Set(char *);
          X& Cat(char *);
          X& Copy(X&);
          void Print();
    };

    X& X::Set(char *pc)         // X& X::Set(X* const this, char *pc)
    {
          len = strlen(pc);     // this->len = strlen(pc);
          ptr = new char[len];  // this->ptr =
                                //   new char[this->len];
          strcpy(ptr, pc);      // strcpy(this->ptr, pc);
          return *this;
    }

    X& X::Cat(char *pc)         // X& X::Cat(X* const this, char *pc)
    {
          len += strlen(pc);    // this->len += strlen(pc);
          strcat(ptr,pc);       // strcat(this->ptr,pc);
          return *this;
    }

    X& X::Copy(X& x)            // X& X::Copy(X* const this, X& x)
    {
          Set(x.GetPtr());      // this->Set(x.GetPtr(&x));
          return *this;
    }

    void X::Print()             // void X::Print(X* const this)
    {
          cout << ptr << endl;  // cout << this->ptr << endl;
    }
    void main()
    {
          X xobj1;
          xobj1.Set("abcd").Cat("efgh");
          // xobj1.Set(&xobj1, "abcd").Cat(&xobj1, "efgh");

          xobj1.Print();        // xobj1.Print(&xobj1);
          X xobj2;
          xobj2.Copy(xobj1).Cat("ijkl");
          // xobj2.Copy(&xobj2, xobj1).Cat(&xobj2, "ijkl");

          xobj2.Print();        // xobj2.Print(&xobj2);
    }

    /************************************************************************
    *

This example produces the following output:

    abcdefgh
    abcdefghijkl

                                                                            *
    ************************************************************************/