|
|
 |
|
|
|
|
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]; |
|
|
|
 |
|
|
|
|
continues |
|
|
|
|
|