// STRINGS.CPP #ifndef __STRINGS_CPP #define __STRINGS_CPP #include "strings.h" #include #include void Error_1_Strings(); void Error_2_Strings(); void Error_3_Strings(); extern void( *_new_handler )(); // POINTER TO A FUNCTION int Strings::strings_count = 0; Strings::Strings() { _new_handler = &Error_1_Strings; ++strings_count; strings_id = strings_count; str = new char[ 1 ]; strcpy( str, "" ); len = 0; } Strings::Strings( int n ) { _new_handler = &Error_1_Strings; ++strings_count; strings_id = strings_count; str = new char[ n + 1 ]; len = n; } inline Strings::Strings( char *newstr ) { Assign( newstr ); } inline Strings::~Strings() { delete str; } int Strings::Assign( char *strnew ) { int i; _new_handler = &Error_2_Strings; i = strlen( strnew ); str = new char[ i + 1 ]; strcpy( str, strnew ); len = i; return( len ); } inline int Strings::Strings_Count( void ) const { return( strings_count ); } inline int Strings::Strings_ID( void ) const { return( strings_id ); } inline int Strings::Lenth() const { return( len ); } inline char *Strings::Peek() const { return( str ); } inline void Strings::Print() const { cout << str; } Strings operator + ( Strings &a, char *b ) { char *temp; int i; _new_handler = &Error_3_Strings; i = a.len + strlen( b ); temp = new char[ a.len + 1 ]; strcpy( temp, a.str ); delete a.str; a.str = new char[ i + 1 ]; strcpy( a.str, temp ); strcat( a.str, b ); delete temp; a.len = i; return( a.len ); } Strings operator + ( Strings &a, Strings &b ) { char *temp; int i; _new_handler = &Error_3_Strings; i = a.len + b.len; temp = new char[ a.len + 1 ]; strcpy( temp, a.str ); delete a.str; a.str = new char[ i+1 ]; strcpy( a.str, temp ); strcat( a.str, b.str ); delete temp; a.len = i; return( a.len ); } void Error_1_Strings() { cerr << "\n\n\t MEMORY ERROR: NEW in Strings Constructor. " << " Count = " << Strings::strings_count << "\n"; exit ( 1 ); } void Error_2_Strings() { cerr << "\n\n\t ==>> MEMORY ERROR: NEW in Strings::Assign Function. " << " Count = " << Strings::strings_count << "\n"; exit ( 2 ); } void Error_3_Strings() { cerr << "\n\n\t ==>> MEMORY ERROR: in Strings \"+\" Operator. <<==\n"; exit ( 3 ); } #endif // __STRINGS_CPP