#include<iostream>
using namespace std;
class String
{
public:
String();
~String();
String(const char* ch);
String(const char ch);
String(const String &str);
String operator +(const String &str);
String operator +(const char ch);
String operator =(const char * ch);
String operator =(const char ch);
String operator =(const String &str);
private:
char * str;
int length;
};
//======================================================================
//缺省构造
String::String()
{
str = 0;
length = 0;
}
//析构函数----------------------------------------------
String::~String()
{
length = 0;
if(str)
{
delete []str;
str = 0;
}
}
//=====================================================================
//用char类型构造
String::String(const char ch)
{
str = new char[2];
length = 2;
str[0] = ch;
str[1] = '/0';
}
//-------------------------------------------------------
//用char*类型构造
String::String(const char* ch)
{
int k = 0;
while(*(ch+k) != 0)
{
k++;
}
length = k + 1;
this->str = new char[length];
for(int j = 0;j<length ;j++)
{
*(str+j) = *(ch+j);
}
}
//-------------------------------------------------------
//拷贝构造 利用String类型构造
String::String(const String &str)
{
this->length = str.length;
this->str = new char[length];
for(int i = 0; i != length; i++)
{
(this->str)[i] = str.str[i];
}
}
//=================================================================
//重载 = 赋值char类型
String String::operator =(char ch)
{
str = new char[2];
length = 2;
str[0] = ch;
str[1] = '/0';
return *this;
}
//-------------------------------------------------------
重载 = 赋值char*类型
String String::operator =(const char * ch)
{
int k = 0;
while(*(ch+k) != 0)
{
k++;
}
length = k + 1;
this->str = new char[length];
for(int j = 0;j<length ;j++)
{
*(str+j) = *(ch+j);
}
return *this;
}
//-------------------------------------------------------
//重载 = 赋值String类型
String String::operator =(const String &str)
{
this->length = str.length;
this->str = new char[length];
for(int i = 0; i != length; i++)
{
(this->str)[i] = str.str[i];
}
return *this;
}
//========================================================================
//重载+ 链接char类型
String String::operator +(const char ch)
{
char* chTemp = new char[this->length + 1];
for(int i = 0;i != length - 1;i++)
{
chTemp[i] = str[i];
}
chTemp[length - 1] = ch;
chTemp[length] = '/0';
String strReturn;
strReturn = chTemp;
delete[] chTemp;
return strReturn;
}
//-----------------------------------------------------------------------
//重载+ 链接String类型
String String::operator +(const String &str1)
{
char* chTemp = new char[length - 1 + str1.length];
int j = 0;
for(int i = 0;i != length - 1 + str1.length;i++)
{
if(i < length - 1)
{
chTemp[i] = str[i];
}
if(i >= length - 1)
{
chTemp[i] = str1.str[j];
j++;
}
}
chTemp[length - 2 + str1.length] = '/0';
String strReturn = chTemp;
delete[] chTemp;
return strReturn;
}
//------------------------------------------------------------------------
int main()
{
//测试代码
String str = "wang";
String str1 = "yu";
String* str2 = new String(str1);
String* str3 = new String("abc");
String* str4 = new String('a');
String str5;
str5 = *str4;
str5 = 'a';
str5 = "abc";
str5 = str1 + '1';
str5 = str + str1;
//销毁
delete str2;
str2 = 0;
delete str3;
str3 = 0;
delete str4;
str4 = 0;
return 0;
}