在使用这个方法以前,那么对象肯定至少已经通过调用构造函数数据成员有了一定的值。所以这个时候我们首先判断两个对象是否
相等。相等的话返回原对象,如果不等:
那么两个对象的字符串长度肯定不同。所以我们先释放原字符串内存空间,然后根据赋值对象的字符串长度分配内存空间并把字符
串内存拷贝过去。
3.字符串处理的几个函数:
size_t MyString::getsize(MyString &str)
{
return strlen(str.string);
}
void MyString::clear()
{
length = 0;
while(string!='/0')
*string ='/0';
}
bool MyString::empty()
{
return strlen(string)==0;
}
int MyString ::compare(const MyString &str)
{
return compare(string,str.string);
}
void MyString::swap(MyString &str)
{
char *temp;
temp = string;
string = str.string;
str = temp;
}
Mystring MyString::substr(sizez_t pos=0,size_t n )const
{
MyString string;
delete[]string.string;
if(n>length)
{
string.length = length;
string.string = new char[length+1];
memcpy(string.string,string,length+1);
return string;
}
length = n;
string.string = new char[length+1];
memcpy(string.string,string,length+1);
return string;
}
注意的几个问题:
1)在这几个函数的实现中,我们可以直接调用c语言中几个对字符串处理的<string.h>函数进行实现
2)clear()函数中注意,只是把每个内存区域的字符置为0,并不能通过delete[]来释放内存空间,这样很容易和析构函数一起造成
两次释放内存空间引起错误。
3)swap()实现交换的这个函数中,我们可以直接定义中间变量指针实现,不用重新分配内存空间全部进行转存,这个对于析构函数
的析构没有影响。
4.友元函数:
friend bool operator==(const MyString &str1,const MyString &str2)
return strcmp(str1.string,str2.string)==0;
friend MyString operator+(const MyString &str1,const MyString &str2)
{
MyString mystring;
char *dest;
dest = new char[str1.length+str2.length+1];
memcpy(dest,str1.string,str1.length);
memcpy(dest+str1.length,str2.string,str2.length+1);
delete[]mystring.string;
mystring.string = dest;
mystring.length = str1.length+str2.length;
return mystring;
}
friend ostream &operator<<(ostream &os,const MyString &str)
{
os<<str.string;
return os;
}
注意的问题和上面差不多,这里就不重复了~~~
其他几个函数实现都基本雷同~
注:相关教程知识阅读请移步到C++教程频道。










