#include #include #include #ifndef IOSTREAM_H #define IOSTREAM_H #include #endif class String { public: String(); String(const char * const); String(const String &); ~String(); char & operator[](unsigned short offset); char operator[](unsigned short offset) const; String operator+(const String&); void operator+=(const String&); String & operator=(const String &); friend ostream & operator<<(ostream & theStream, String & theString); unsigned short GetLen() const { return itsLen;} const char * GetString() const { return itsString;} //static int ConstructorCount; private: String (unsigned short); char * itsString; unsigned short itsLen; }; String::String() { itsString = new char[1]; itsString[0] = '\0'; itsLen = 0; //cout << "\tDefault string constructor\n"; //ConstructorCount++; } String::String(unsigned short len) { itsString = new char[len+1]; for (unsigned short i=0; i<=len; i++) itsString[i] = '\0'; itsLen = len; //cout << "\tString(int) constructor\n"; //ConstructorCount++; } String::String(const char * const cString) { itsLen = strlen(cString); itsString = new char[itsLen+1]; for (unsigned short i=0; i itsLen) return itsString[itsLen-1]; else return itsString[offset]; } char String::operator[](unsigned short offset) const { if (offset > itsLen) return itsString[itsLen-1]; else return itsString[offset]; } String String::operator+(const String& rhs) { unsigned short totalLen = itsLen + rhs.GetLen(); String temp(totalLen); unsigned short i, j; for (i=0; i