#include <iostream.h>
#include <stdlib.h>
#include <strings.h>
class String
{
    unsigned int Buffer_Len;
    char *Buffer;
    friend int operator == (const String & Lhs , const String & Rhs);
    friend ostream& operator << (ostream& st , String& S);

public:
//constructors: note that  we can overload the constructor
    String (const char * Value = NULL) ;    // const strings " .. "
    String (char * Value = NULL) ;          // Dynamically allocated strings
    String (const String & Value) ;         // Copy constructor

// Assignment Operator: an instance of operator overloading
    const String & operator = ( const String & Value ) ;
// Type cast to char *
    operator const char * const ( ) const { return Buffer ;}

};
// Friends
ostream& operator << (ostream& st , String& S)
{
    st << S.Buffer;
    return (st);
}
