您的位置:首页 > 编程语言 > C语言/C++

C++ string类的实现

2016-02-23 16:40 399 查看
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
;
}
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ string class