#ifndef String_h
#define String_h
#include <stream.h>
class String
{
    unsigned int Buffer_Len;
    char *Buffer;
    
public:
//constructors: note that  we can overload the constructors
    String (const char * val = NULL) ;  // const strings " .. "
    String (char * val = NULL) ;        // Dynamically allocated strings    
    String (const String & val) ;       // Copy constructor
 
// Assignment Operator: an instance of operator overloading
     const String & operator = ( const String & val ) ;

// Type cast String to char *
     operator const char * const ( ) const { return Buffer ;}

// Friends

   friend int operator < (const String & Lhs , const String & Rhs);
   friend int operator > (const String & Lhs , const String & Rhs);
   friend ostream& operator << (ostream& st , String& S);
 
 };
// Friends
 ostream& operator << (ostream& st , String& S)
          { st << S.Buffer; return (st)}
#endif
