[ create a new paste ] login | about

Link: http://codepad.org/AGVkmZ5x    [ raw code | output | fork ]

C++, pasted on Dec 7:
#include <string>
#include <iostream>
using namespace std;
 
class sChar
{
private:
    char* str;
    long  len;
public:
	sChar();
    sChar(const char * ch = 0);
    sChar(const sChar &ch);
    ~sChar();
    sChar& operator+(const sChar &ch);//додати sChar + sChar
    sChar& operator+(const char *ch);//додати sChar + char
	sChar& operator=(const char *ch);//присвоїти sChar + char
    sChar& CharTosCh(const char *ch);
    char * sChToChar() const;//sChar перетворити в char
    long   sChLength() const;
    friend ostream &operator<<(ostream &out, const sChar &ch){
        out<<ch.sChToChar();
        return out;
    }
};

sChar::sChar(const char * ch){
    cout<<"DEFAULT CONSTRUCTOR"<<endl;
    str = 0;
    len = 0;
    if( ch != 0 )
    {
        len = strlen(ch);
        str = new char[1 + len];
        memcpy(str, ch, len);
        str[len] = 0;
    }
}
 
sChar::sChar(const sChar &ch){
    cout<<"COPY CONSTRUCTOR"<<endl;
    str = 0;
    len = 0;
    if( ch.str != 0 )
    {
        len = strlen(ch.str);
        str = new char[1 + len];
        memcpy(str, ch.str, len);
        str[len] = 0;
    }
}
 
sChar::~sChar(){
    cout<<"DESTRUCTOR"<<endl;
    delete [] str;
}
 
sChar& sChar::CharTosCh(const char *ch)//char перетворити в sChar
{
    delete str;
    len  = 0;
    str  = 0;
    if( ch != 0 )
    {
        len = strlen(ch);
        if( len != 0 )
        {
            str = new char[1 + len];
            memcpy(str, ch, len);
            str[len] = 0;
        }
    }
    return *this;   
}
 
char* sChar::sChToChar() const//sChar перетворити в char
{
    return str;
}
 
long  sChar::sChLength() const{
    return len;
}
 
sChar& sChar::operator+(const char *ch)//додати sChar + char
{
    cout<<"operator+(const char *ch)"<<endl;
    char *cpy = 0;
    long size = 0;
    if( ch )
    {
        size  = strlen(ch);
        cpy   = new char[1 + len + size];
        memcpy(cpy, str, len);
        memcpy(cpy + len, ch, size);
        len = len + size;
        cpy[len] = 0;
        delete[] str;
        str = cpy;
    }
    return *this;
}
 
sChar& sChar::operator+(const sChar &ch)//додати sChar + sChar
{
    cout<<"operator+(const sChar &ch)"<<endl;
    return operator+(ch.str);
}

sChar& sChar::operator=(const char *ch){
	cout<<"operator=(const char *ch)"<<endl;
	delete str;
	len = 0;
	if( ch )
	{
		len = strlen(ch);
		str = new char[1 + len];
		memcpy(str, ch, len);
		str[len] = 0;
	}
	return *this;
}
 
int main()
{
    //створюємо рядок
    sChar g = "string";
    cout << g.sChToChar() << endl;
 
    //додаємо рядки
    sChar var1 = "C", var2 = "++";
    var1 = "11";
    cout << "\n" << var1 + var2;
 
    //додаємо декілька рядків
    cout << (sChar)"\n1" + (sChar)" 2 " + (sChar)"3";
 
    cin.get();
    return 0;
}


Output:
DEFAULT CONSTRUCTOR
COPY CONSTRUCTOR
DESTRUCTOR
string
DEFAULT CONSTRUCTOR
COPY CONSTRUCTOR
DESTRUCTOR
DEFAULT CONSTRUCTOR
COPY CONSTRUCTOR
DESTRUCTOR
operator=(const char *ch)
operator+(const sChar &ch)
operator+(const char *ch)

11++DEFAULT CONSTRUCTOR
DEFAULT CONSTRUCTOR
DEFAULT CONSTRUCTOR
operator+(const sChar &ch)
operator+(const char *ch)
operator+(const sChar &ch)
operator+(const char *ch)

1 2 3DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR
DESTRUCTOR


Create a new paste based on this one


Comments: