String类的实现:
#include <iostream>
#include <string.h>
using namespace std;
class String
{
public:
String();
String(const char *str);
String(const String &other);
String &operator=(const String &other);
String &operator+=(const String &other);
friend String operator+(const String &s1, const String &s2);
friend ostream& operator<<(ostream &out, const String &s);
~String();
private:
char *data;
};
//构造函数
String::String()
{
data = new char[1];
data = '\0';
}
//构造函数
String::String(const char *str)
{
int length = strlen(str) + 1;
data = new char[length];
memset(data, 0, length);
strcpy(data, str);
}
//拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.data) + 1;
data = new char[length];
memset(data, 0, length);
strcpy(data, other.data);
}
//=运算符重载函数,返回对象的引用
String &String::operator=(const String &other)
{
if(this == &other)
{
return *this;
}
int length = strlen(other.data) + 1;
data = new char[length];
memset(data, 0, length);
strcpy(data, other.data);
return *this;
}
//+=运算符重载函数,返回对象引用
String &String::operator+=(const String &other)
{
int length = strlen(this->data) + strlen(other.data) + 1;
char *str = new char[length];
strcpy(str, this->data);
strcat(str, other.data);
delete[] data;
data = new char[length];
strcpy(data, str);
return *this;
}
//+运算符重载函数,定义为友元函数,返回一个临时对象。
String operator+(const String &s1, const String &s2)
{
String tmp;
int length = strlen(s1.data) + strlen(s2.data) + 1;
tmp.data = new char[length];
strcpy(tmp.data, s1.data);
strcat(tmp.data, s2.data);
return tmp;
}
//析构函数
String::~String()
{
delete[] data;
}
//输出函数
ostream &operator<<(ostream &out, const String &s)
{
out<<s.data;
return out;
}
int main()
{
String a("hello");
String b("world");
String d = a + b;
String c;
a+=b;
return 0;
}