C++String类主要函数的实现:
class MyString
{
friend ostream& operator<< (ostream&, MyString&); //重载<<
friend istream& operator >> (istream&, MyString&); //重载>>
public:
MyString(const char* str=NULL); //构造函数
MyString(const MyString &str); //赋值构造函数
MyString& operator=(const MyString &str); //重载运算符=
MyString operator+(const MyString &str); //重载运算符+
bool operator==(const MyString&); //重载运算符==
char& operator[](unsigned int); //重载运算符[]
size_t size() { return strlen(data); }
~MyString() { delete[] data; }
private:
char *data; //保存字符串
}
MyString::MyString(const char*str)
{
if(str == NULL)
{
data = new char[1];
*data = '\0';
}
else
{
int length = strlen(str);
data = new char[length + 1];
strcpy(data, str);
}
}
MyString::MyString(const MyString &str)
{
int length = strlen(str.data);
data = new char[length + 1];
strcpy(data, str.data);
}
MyString& MyString::operator=(const MyString& str)
{
if(this == &str) //检查自赋值
return *this;
delete[] data; //释放原有内存资源
//分配新的内存资源,并复制内容
int length = strlen(str.data);
data = new char[length + 1];
strcpy(data, str.data);
//返回本对象引用
return *this;
}
MyString MyString::operator+(const MyString &str) const
{
MyString newString;
if(!str.data)
newString = *this;
if(!data)
newString = str;
else
{
newString.data = new char[strlen(data) + strlen(str.data) + 1];
strcpy(newString.data, data);
strcat(newString.data, str.data);
}
return newString;
}
bool MyString::operator==(const MyString& str)
{
if(strlen(str.data) != strlen(data))
return false;
return strcmp(data, str.data) ? false : true;
}
char& MyString::operator[](unsigned int n)
{
if(n >= 0 && n <= strlen(data))
return data[n];
}
ostream& operator<<(ostream& os, MyString& str)
{
os << str.data;
return os;
}
istream& operator>>(istream& is, MyString& str)
{
char temp[256];
is >> setw(256) >> temp;
str = temp;
return temp;
}