普通构造函数/拷贝构造函数/析构函数/赋值运算符函数/+运算符函数/相等运算符函数/索引运算符函数/length函数/友元函数
class String
{
friend std::ostream& operator<<(std::ostream& os,const string& s);//友元函数
public:
String(const char* str=NULL);//普通构造函数;
String(const String& str);//拷贝构造函数
~String();//析构函数
Sring& operator=(const String& str);//赋值运算符函数
Sring operator+(const String& str);//+运算符函数
bool operator==(const String& str);//相等运算符函数
char operator[](int idx);//索引运算符函数
int getlength();//length函数
private:
char* m_data;
}
//普通构造函数
String::String(const char* str)
{
if(str==0)
this->m_data=0;
else
{
this->m_data=new char[strlen(str)+1];
strcpy(this->m_data,str);
}
return *this;
}
//拷贝构造函数
String::String(const String& str)
{
if(str.m_data==0)
this->m_data=0;
else
{
this->m_data=new char[strlen(str.m_data)+1];
strcpy(this->m_data,str.m_data);
}
return *this;
}
String::~String()
{
if(this->m_data)
{
delete[]this->m_data;
this->m_data=0;
}
}
//赋值运算符函数
Sring& String::operator=(const string & str)
{
if(&str!=this)
{
delete[]this->m_data;
if(str.m_data==0)
this->m_data=0;
else
{
this->m_data=new char[strlen(str.m_data)+1];
strcpy(this->m_data,str.m_data);
}
}
return *this;
}
//赋值运算符函数优化版本
Sring& String::operator=(const string & str)
{
if(&str!=this)
{
String strTemp(str);
char* pTemp=strTemp.m_data;
strTemp.m_data=this->m_data;
this->m_data=pTemp;
}
return *this;
}
//+运算符函数
Sring String::operator+(const String& str)
{
String newString;
if(!str.m_data)
newString.m_data=this->m_data;
else if(!this->m_data)
newString.m_data=str.m_data;
else
{
newString->m_data=new char[strlen(str.m_data)+strlen(this->m_data)+1];
strcpy(newString.m_data,str.m_data);
strcpy(newString.m_data,this->m_data);
}
return newString;
}
//相等运算符函数
bool String::operator==(const String& str)
{
if(strlen(str.m_data)!=strlen(this->m_data))
return false;
else
{
return strcmp(str.m_data,this->m_data)?false:true;
}
}
//索引运算符函数
char String::operator[](int idx);
{
if(idx>0&&idx<strlen(this->m_data))
return this->m_data[idx];
}
//length函数
int String::getlength();
{
return strlen(this->m_data);
}
//友元函数
std::ostream& operator<<(std::ostream& os,const string& str)
{
os<<str.m_data;
return os;
}