學習c++實現Cstring類

參考  mo_guang  的博客http://blog.csdn.net/moxiaomomo/article/details/6411584

Cstring主要包括字符串=,==,+,>>,<<等符號的重載.

#include 
#include 
using namespace std;
class String
{
public:
 
 String(const char*str=NULL);
 String(const String &other);

 String& operator =(const String &other);//重載=運算符
 String operator+(const String &other);//重載+運算符
 bool operator ==(const String&);//重載==運算符
 char& operator [](unsigned int);//重載取下標運算符
friend ostream& operator << (ostream&,String&);//重載<<運算符
friend istream& operator >> (istream&,String&);//重載輸入運算符

 ~String(void) {delete[] m_data;}  
private:
//public:
 char *m_data; // 用於保存字符串 
};


String::String(const char* str)
{
 if(!str) m_data=0;
 else
  {
  m_data=new char[strlen(str)+1];
  strcpy(m_data,str);
  }
}

String::String(const String& other)
{
 if(!other.m_data) m_data=0;
 else
 {
 m_data=new char[strlen(other.m_data)+1];
 strcpy(m_data,other.m_data);
}
}

String& String::operator =(const String &other)
{
if(!other.m_data) m_data=0;
else
{
  m_data=new char[strlen(other.m_data)+1];
  strcpy(m_data,other.m_data);
}
return *this;
}

String String::operator + (const String &other)
{
String newString;
if(!other.m_data)
  newString=*this;
else if(!m_data)
  newString=other;
else
{
 newString.m_data=new char[strlen(m_data)+strlen(other.m_data)+1];
 strcpy(newString.m_data,m_data);
 strcat(newString.m_data,other.m_data);
 }
return newString;
}

bool String::operator ==(const String& s)
{
if(strlen(m_data)!=strlen(s.m_data))
 return false;
return strcmp(m_data,s.m_data)?false:true;
}

char& String::operator [](unsigned int num)
{
if(num>=0&&num> (istream& is,String& str)
{
 char temp[255];
is>>temp;
str=temp;
return is;
}
int main()
{
String str1("love");
String str2=str1;

cin>>str2;
String str=str1+str2;
cout<


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章