#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;
}