#include <iostream>
#include <cstring>
#include<cstdio>
using namespace std;
class String {
public:
String(const char* src = NULL);//构造函数
String(const String& other);//拷贝构造函数
~String();//析构函数
String& operator =(const String& other);//重载赋值运算符
String operator+(const String& str2); //重载加号运算符
void ShowString();
private:
char* data;
int length;
};
//String 的构造函数
String::String(const char* src)
{
if (src == NULL)//当初始化串不存在的时候,为data申请一个空间存放'\0';
{
data = new char[1];
*data = '\0';
}
else//当初始化串存在的时候,为data申请同样大小的空间存放该串;
{
data = new char[strlen(src) + 1];
if(data != 0)
strcpy(data, src);
}
}
//析构函数
String::~String()
{
delete[] data;//析构函数释放地址空间
}
//拷贝构造函数 ,功能与构造函数类似
String::String(const String& other)
{
data = new char[strlen(other.data) + 1];//为data开辟新的空间,大小为另一个对象的大小+1
if(data !=0)
strcpy(data, other.data);
}
//重载赋值运算符
String& String::operator = (const String& other)
{
if (data == other.data)
return *this;//当地址相同时,直接返回
delete[] data;//当地址不同时,删除原来申请的空间,重新开始构造
data = new char[strlen(other.data) + 1];
strcpy(data, other.data);
return *this;
}
//重载加号运算符
String String::operator+ (const String& str2)
{
String Str;
delete Str.data;
Str.length = strlen(data) + strlen(str2.data);
Str.data = new char[Str.length + 1];
strcpy(Str.data, data);
strcat(Str.data, str2.data);
return Str;
}
void String::ShowString()//data是私有成员,对象只能通过public成员函数来访问
{
cout << this->data << endl;
}
int main()
{
String s1;
String s2("hello");
s1.ShowString();
s1 = s2;
s2.ShowString();
s1.ShowString();
s1 = "world";
String s3(s1);
s3.ShowString();
String s4 = s2 + s1;
s4.ShowString();
return 0;
}