#include<iostream>
#include<cstring>
using namespace std;
// char arr[]="abcdefg";
// strcmp是比较函数
// 迭代器可以透明地访问容器内部元素的值
class String
{
public:
String (const char *p=nullptr)
{
if(p!=nullptr)
{
_pstr=new char[strlen(p)+1];
strcpy(_pstr,p);
cout<<"string(const char *p=nullptr)"<<endl;
}
else
{
_pstr=new char[1];
*_pstr='\0';
}
}
~String()
{
delete[]_pstr;
_pstr=nullptr;
}
String (const String &str)
{
_pstr=new char[strlen(str._pstr)+1];
strcpy(_pstr,str._pstr);
}
String &operator =(const String &src)
{
if(this==&src)
{
return *this;
}
delete[]_pstr;
_pstr=new char[strlen(src._pstr)+1];
strcpy(_pstr,src._pstr);
cout<<"调用了="<<endl;
}
bool operator>(const String &src)
{
return strcmp(_pstr,src._pstr)>0;
}
bool operator<(const String &src)
{
return strcmp(_pstr,src._pstr)<0;
}
bool operator==(const String &src)
{
return strcmp(_pstr,src._pstr)<0;
}
int length() const{
return strlen(_pstr);
}
char& operator[](int index)
{
return _pstr[index];
}
// 常对象不允许修改
const char & operator[](int index) const {
return _pstr[index];
}
// 给string字符串类型提高迭代器的实现
class iterator{
public:
iterator(char *p=nullptr):_p(p){}
bool operator!=(const iterator &it)
{
// 指针不一样
return _p!=it._p;
}
void operator++()
{
++_p;
}
char& operator*()
{
return *_p;
}
private:
char *_p;
};
iterator begin()
{
return iterator(_pstr);
}
iterator end()
{
return iterator(_pstr+length());
}
private:
char *_pstr;
friend String operator+(const String &lhs,const String &rhs);
friend ostream& operator<<(ostream &out,const String &str);
};
String operator+(const String &lhs,const String &rhs)
{
// char *ptmp=new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
String tmp;
tmp._pstr=new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
strcpy(tmp._pstr,lhs._pstr);
strcat(tmp._pstr,rhs._pstr);
// String tmp(ptmp);
// delete[]ptmp;
return tmp;
}
int main(void)
{
//调用的是构造函数
String s1="abcdefg";
//"abcdfs"调用了构造函数
s1="abcdfs";
// cout<<s1[3]<<endl;
String::iterator it=s1.begin();
for(;it!=s1.end();++it)
{
cout<<*it<<" ";
}
cout<<endl;
for(char ch:s1)
{
cout<<ch<<" ";
}
cout<<endl;
return 0;
}
string的代码实现
于 2022-03-10 19:51:55 首次发布