#include <string.h>
#include <stdio.h>
//重载操作符
class String
{
protected:
char* _data;
int _size;
public:
String()
{
_data = new char[1];
_data[0] = 0;
_size = 0;
}
String(const char* str)
{
_size = strlen(str);
_data = new char[_size + 1];
strcpy(_data, str);
}
String(char* data,int length)
{
_data = data;
_size = length;
}
String(const String& right)
{
_size = right._size;
_data = new char[_size + 1];
strcpy(_data, right._data);
}
~String()
{
delete[] _data;
_size = 0;
}
void operator=(String& right)
{
delete[] _data;
_size = right._size;
_data = new char[_size + 1];
strcpy(_data, right._data);
}
void operator+=(const String& right)
{
char* pTemp = new char[_size+right._size+1];
strcpy(pTemp, _data);
strcpy(pTemp+_size, right._data);
delete[]_data;
_data = pTemp;
_size += right._size;
}
void operator+=(const char* str)
{
int len = strlen(str);
char* pTemp = new char[_size + len + 1];
strcpy(pTemp, _data);
strcpy(pTemp + _size, str);
delete[]_data;
_data = pTemp;
_size += len;
}
void operator+(const char* str)
{
int len = strlen(str);
char* pTemp = new char[_size + len + 1];
strcpy(pTemp, _data);
strcpy(pTemp + _size, str);
delete[]_data;
_data = pTemp;
_size += len;
}
void operator=(const char* str)
{
delete[] _data;
_size = strlen(str);
_data = new char[_size + 1];
strcpy(_data, str);
}
String operator+(const String& right)
{
char* pData = new char[_size + right._size + 1];
strcpy(pData, _data);
strcpy(pData + _size, right._data);
return String(pData, _size+right._size);
}
char& operator[](int index)
{
return _data[index];
}
};
int main(int argc, char *argv[])
{
String str;
String str1("aaa");
String str2 = "aaa";
String str4 = str2;
String str5;
str5=str1;
str5 += str2;
char szBuf[10] = "he";
str5 += szBuf;
str5 += "test";
str5 ="aaaaaaaa";
str5 = str1 + str2;
char szData[] = "hello world";
printf("%d", sizeof(szData));
str5[0] = 'c';
getchar();
return 0;
}