实现c++的string类
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
using namespace std;
class myString
{
public:
myString()//默认构造函数
{
length = 0;
data = NULL;
}
myString(const char *str)//构造函数
{
if (!str)
{
length = 0;
data = new char[1];
*data = '\0';
}
else
{
length = strlen(str);
data = new char[length + 1];
strcpy(data, str);
}
}
myString(const myString& str)//拷贝构造函数,深拷贝
{
length = str.size();
data = new char[length + 1];
strcpy(data, str.c_str());
}
size_t size()const
{
return length;
}
const char* c_str() const
{
return data;
}
char& operator[](int n) const//重载[]
{
if (n >= length)
return data[length - 1];
else
return data[n];
};
myString operator+(const myString& str) const//重载+
{
myString newString;
newString.length = length + str.length;
newString.data = new char[newString.length + 1];
strcpy(newString.data, data);
strcat(newString.data, str.data);
return newString;
}
myString& operator=(const myString& str)//重载=
{
if (this == &str)
{
return *this;
}
else
{
delete[] data;
length = str.length;
data = new char[str.length + 1];
strcpy(data, str.data);
return *this;
}
}
friend istream& operator>>(istream &is, myString &str)//重载cin 注意友元函数
{
char tem[1000]; //简单的申请一块内存
is >> tem;
str.length = strlen(tem);
str.data = new char[str.length + 1];
strcpy(str.data, tem);
return is;
}
friend ostream& operator<<(ostream &os, myString &str)//重载cout
{
os << str.data;
return os;
}
~myString()//析构函数
{
delete[]data;
length = 0;
}
private:
char *data;
size_t length;
};
int main()
{
//测试代码
myString tmp("123");
myString tmp2;
cout << tmp << endl;
cin >> tmp2;
cout << tmp2 << endl;
myString tmp3 = tmp + tmp2;
cout << tmp3 << endl;
return 0;
}