注: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;
}
}<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 /> }}<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 />}
