/* Name : TEST.CPP Date : 7 April, 1992 Author : Kim Moser System : Borland C++ 3.0 Descrip: String class test */ #include #include #include class String { private: char *data; // Pointer to string int size; // Number of bytes allocated int length; // Length of string char* allocate(int len); void unallocate(void); void assign(const String& src); void assign(const char *src); void reassign(const String& src); void reassign(const char *s); public: String(char *s); String(void); String(String&); void print(ostream &outstream = cout) const; int len(void) const; String& operator =(const String &src); String& operator =(const char *s); char* operator <<(const String &src); char& operator [](int i); ~String(void); }; char* String::allocate(int len) { return (data = new char [size = len]); } void String::unallocate(void) { delete[] data; } void String::assign(const char *src) { strcpy(data, src); length = strlen(src); } void String::assign(const String& src) { assign(src.data); } void String::reassign(const char *s) { int len = strlen(s); if (size <= len) { // Won't fit, so reallocate: unallocate(); allocate(len + 1); } assign(s); } void String::reassign(const String& src) { reassign(src.data); } String::String(char *s) { if (allocate(strlen(s) + 1) != 0) { assign(s); } } String::String(void) { if (allocate(1) != 0) { assign(""); } } String::String(String& src) { if (allocate(src.len())) { assign(src); } } void String::print(ostream &outstream) const { outstream << data; } int String::len(void) const { return (length); } String& String::operator =(const String &src) { reassign(src); return (*this); } String& String::operator =(const char *s) { reassign(s); return (*this); } char& String::operator [](int i) { static char dummy = '\0'; if (i >= 0 && i < len()) { return (data[i]); } else { return (dummy); } } char* String::operator <<(const String &src) { return ((char *) data); } String::~String(void) { if (size) { unallocate(); size = length = 0; } } void main(void) { cerr << "\n\n"; String teststring("Hello, world.\n"); String teststring2 = teststring; String teststring3; teststring3 = "Hello"; teststring[2] = 'X'; teststring2[2] = 'Y'; teststring3[2] = 'Z'; cerr << "teststring = "; teststring.print(); cerr << "teststring2 = "; teststring2.print(); cerr << "teststring3 = "; teststring3.print(); }