< previous page page_362 next page >

Page 362
LISTING 21.4 continued
d5ef64f4d3250b96ba5c07ca5bbc2f56.gif
82:   }
83:
84:   // destructor, frees allocated memory
85:   String::~String ()
86:   {
87:      ASSERT(Invariants());
88:      delete [] itsString;
89:      itsLen = 0;
90:   }
91:
92:   // operator equals, frees existing memory
93:   // then copies string and size
94:   String& String::operator=(const String & rhs)
95:   {
96:      ASSERT(Invariants());
97:      if (this == &rhs)
98:         return *this;
99:      delete [] itsString;
100:     itsLen=rhs.GetLen();
101:     itsString = new char[itsLen+1];
102:     for (int i = 0; i<itsLen;i++)
103:         itsString[i] = rhs[i];
104:     itsString[itsLen] = \0;
105:     ASSERT(Invariants());
106:     return *this;
107:  }
108:
109:  //non constant offset operator, returns
110:  // reference to character so it can be
111:  // changed!
112:  char & String::operator[](int offset)
113:  {
114:     ASSERT(Invariants());
115:     if (offset > itsLen)
116:        return itsString[itsLen-1];
117:     else
118:        return itsString[offset];
119:     ASSERT(Invariants());
120:  }
121:
122:  // constant offset operator for use
123:  // on const objects (see copy constructor!)
124:  char String::operator[](int offset) const
125:  {
126:     ASSERT(Invariants());
127:     if (offset > itsLen)
128:        return itsString[itsLen-1];
129:     else
130:        return itsString[offset];
d5ef64f4d3250b96ba5c07ca5bbc2f56.gif
continues

 
< previous page page_362 next page >

If you like this book, buy it!