注:1、缺省值不要赋值为NULL,空字符串可以写成 “” ;
    2、+=操作符特殊,eg:s1+=s2,s1=s1+s2,必须将串接结果赋值给原来的对象;return什么不重要,主要是原有的内存(s1)里最后变成了什么。
    #include
    #pragma warning(disable:4996);
    using namespace std;
    class String
    {
    private:
    char str;
    public:
    String(const char
    s = NULL) //构造函数
    {
    if (s != NULL){
    str = new char[strlen(s) + 1];
    strcpy(str, s);
    }
    else{
    str = NULL;
    }

    1. }<br /> String(const String& string) //复制构造函数<br /> {<br /> if (string.str != NULL){<br /> str = new char[strlen(string.str) + 1];<br /> strcpy(str, string.str);<br /> }<br /> else{<br /> str = NULL;<br /> }
    2. }<br /> ~String() //析构函数<br /> {<br /> cout << "Destruct!" << endl;<br /> }<br /> void Set(char* s)<br /> {<br /> str = new char[strlen(s) + 1];<br /> strcpy(str, s);<br /> }<br /> void Print()<br /> {<br /> if (str != NULL) {<br /> cout << str << endl;<br /> }<br /> else {<br /> cout << "NULL!" << endl;<br /> }<br /> }<br /> String operator +(const String& string2)<br /> {<br /> String string;<br /> if (this->str != NULL && string2.str != NULL) {<br /> string.str = new char[strlen(this->str) + strlen(string2.str) + 1];<br /> strcpy(string.str, this->str);<br /> strcat(string.str, string2.str);<br /> return string;<br /> }<br /> else if (this->str == NULL) {<br /> return string2;<br /> }<br /> else if (string2.str == NULL) {<br /> return *this;<br /> }<br /> else return NULL;<br /> }<br /> void operator =(const String& string1)<br /> {<br /> this->str = new char[strlen(string1.str) + 1];<br /> strcpy(this->str, string1.str);<br /> }<br /> String operator +=(const String& string) //操作符重载+=<br /> {<br /> if (this->str == NULL&&string.str!=NULL) {<br /> this->str = new char[strlen(string.str)];<br /> strcpy(this->str, string.str);<br /> return *this;<br /> }<br /> else if (string.str== NULL&&this->str!=NULL) {<br /> return *this;<br /> }<br /> else if (string.str != NULL && this->str != NULL) {<br /> char* temp = new char[strlen(this->str) + 1];<br /> strcpy(temp, this->str);<br /> this->str = new char[strlen(string.str) + strlen(temp) + 1];<br /> strcpy(this->str, temp);<br /> this->str = strcat(this->str, string.str); <br /> return *this;<br /> }<br /> else {<br /> return NULL;<br /> }<br /> }<br />};<br />int main()<br />{<br /> String s1("abcd"), s2("efghij"), s3("lmnop"), s4, s5,s6;<br /> s1 += s2;<br /> s2 += s4;<br /> s3 += s3 += s2;<br /> s4 += s1;<br /> s5 += s6;<br /> s1.Print();<br /> s2.Print();<br /> s3.Print();<br /> s4.Print();<br /> s5.Print();<br />}