All pastes #795999 Raw Edit

Mine

public cpp v1 · immutable
#795999 ·published 2007-11-24 17:53 UTC
rendered paste body
#include <iostream>#include <fstream>#include <sstream>#include <iomanip>#include <string>#include <new>#include <cstdlib>using namespace std;class STRING {    friend ostream &operator << ( ostream &, const STRING & );    friend istream &operator >> ( istream &, STRING & );        public :        STRING ( const char* = "" ); /*Conversion constructor*/        STRING ( const STRING & ); /*Copy constructor*/       ~STRING(); /*Destructor*/        const STRING &operator = ( const STRING & );        const STRING &operator += ( const STRING & );                    bool operator ! () const;        bool operator == ( const STRING & ) const;        bool operator < ( const STRING & ) const;        /* FOUR BOOL FUNCTION */bool operator != ( const STRING &object ) const{    return ! ( *this == object );}bool operator > ( const STRING &object ) const {    return object < *this;}bool operator <= ( const STRING &object ) const{    return ! ( object < *this );}bool operator >= ( const STRING &object ) const {    return ! ( *this > object );}/*END ALL BOOL FUNCTION*/                char &operator [] ( int );        const char &operator [] ( int ) const;        STRING operator () ( int, int );                int getLength() const;    private :        int LEN;        char *sPointer;            void setString ( const char * );/*Utility function*/};/*Default constructor */STRING::STRING ( const char *aString ) : LEN (strlen(aString)){    cout << "Conversion constructor : " << aString << "\n";    setString ( aString );}/*Copy constructor receive one argument passed by reference*/STRING::STRING ( const STRING &itsCopy ) : LEN ( itsCopy.LEN ){    cout << "Copy constructor [][][][] " << itsCopy.sPointer << endl;    setString ( itsCopy.sPointer );}STRING::~STRING(){    cout << "RECLAIM MEMORY ! " << sPointer << endl;    delete [] sPointer;}const STRING &STRING::operator = ( const STRING &object ){    cout << " OPERATOR = " << endl;    if ( &object != this )    {        delete [] sPointer;        LEN = object.LEN;        setString ( object.sPointer );    }    else        cout << "Assign a string to itself !!";        return *this;}const STRING &STRING::operator += ( const STRING &object ){    size_t newLength = LEN + object.LEN;    char *tmp = new char[newLength + 1];        strcpy ( tmp, sPointer );    strcpy ( tmp + LEN, object.sPointer );        delete [] sPointer;    sPointer = tmp;    LEN = newLength;    return *this;}bool STRING::operator !() const{    return LEN == 0;}bool STRING::operator == ( const STRING &object ) const{    return strcmp ( sPointer, object.sPointer ) == 0;}bool STRING::operator < ( const STRING &object ) const{    return strcmp ( sPointer, object.sPointer ) < 0;}char &STRING::operator [] ( int subscript ){    if ( subscript < 0 || subscript >= LEN )    {        cout << "ERROR : " << endl;            exit (1);    }    return sPointer[subscript];}const char &STRING::operator [] ( int subscript ) const{    if ( subscript < 0 || subscript >= LEN )    {        cout << "ERROR CONST " << endl;                exit (1);    }    return sPointer[subscript];}STRING STRING::operator () ( int dex, int subL ){    if ( dex < 0 || dex >= LEN || subL < 0 )    {        return "";    }        int tmpLength;        if ( (subL == 0) || ( dex + subL > LEN ) )        tmpLength = LEN - dex;    else        tmpLength = subL;        char *tmpPointer = new char[tmpLength + 1];        strncpy ( tmpPointer, &sPointer[dex], tmpLength );    tmpPointer[tmpLength] = '\0';    /*Create temporary STRING object containing the substring*/    STRING objectString ( tmpPointer );    delete [] tmpPointer;        return objectString; /*return copy of the objectString*/}int STRING::getLength() const{    return LEN;}/*Utility function*/void STRING::setString ( const char *STR ){    sPointer = new char[LEN + 1];    strcpy ( sPointer, STR );}ostream &operator << ( ostream &output, const STRING &object ){    output << object.sPointer;    return output;}istream &operator >> ( istream &input, STRING &object ){    char tmp[100]; /*buffer store input*/    input >> setw(100) >> tmp;    object = tmp; /*using assignment operator*/        return input;}int main(){    STRING chan( "happy" );    STRING bao ( "birthday");    STRING another;        cout << chan << endl;    cout << bao << endl;    cout << another << endl;    cout << ( chan == bao ? "true" : "false" ) << endl;    cout << ( chan != bao ? "true" : "false" ) << endl;    cout << ( chan > bao ? "true" : "false" ) << endl;    cout << ( chan < bao ? "true" : "false" ) << endl;    cout << ( chan >= bao ? "true" : "false" ) << endl;    cout << ( chan <= bao ? "true" : "false" ) << endl;        if ( !another )    {        cout << "Iam empty, assign chan to another " << endl;        another = chan;    }        cout << "chan += bao ";    chan += bao;    cout << chan << endl;        chan += "to you";    cout << chan << endl;            cout << chan ( 0, 13 ) << "\n\n";            /*create a new object by using copy constructor*/    STRING *ptr = new STRING (chan );        *ptr = *ptr;    cout << *ptr;        delete ptr;    chan[0] = 'H';    chan[6] = 'B';            system ("pause");}