wayllen 发表于 2013-1-15 03:01:08

重温String类实现

面试时经常会被问到的,请自己实现以下String类。考的很基础的知识,还有考虑问题是否全面。

class String{    friend ostream& operator<< (ostream&,String&);public:    String(const char* str=NULL);                //...........(char)    String(const String &other);               //......(String)    String& operator=(const String&other);       //operator=    String operator+(const String &other)const; //operator+    bool operator==(const String&);            //operator==    char& operator[](unsigned int);            //operator[]    size_t size(){return strlen(m_data);};    ~String(void) {delete[] m_data;}private:    char *m_data;};inline String::String(const char* str){    if (!str) m_data=0;    else    {      m_data = new char;      strcpy(m_data,str);    }}inline String::String(const String& other){    if(!other.m_data) m_data=0;    else    {      m_data=new char;      strcpy(m_data,other.m_data);    }}inline String& String::operator=(const String& other){    if (this!=&other)    {      delete[] m_data;      if(!other.m_data) m_data=0;      else      {            m_data = new char;            strcpy(m_data,other.m_data);      }    }    return *this;}inline String String::operator+(const String &other)const{    String newString;    if(!other.m_data)      newString = *this;    else if(!m_data)      newString = other;    else    {      newString.m_data = new char;      strcpy(newString.m_data,m_data);      strcat(newString.m_data,other.m_data);    }    return newString;}inline bool String::operator==(const String &s){    if ( strlen(s.m_data) != strlen(m_data) )      return false;    return strcmp(m_data,s.m_data)?false:true;}inline char& String::operator[](unsigned int e){    if (e>=0&&e<=strlen(m_data))      return m_data;}ostream& operator<<(ostream& os,String& str){    os << str.m_data;    return os;}void main(){    String str1="Hello!";    String str2="Teacher!";    String str3 = str1+str2;    cout<<str3<<"\n"<<str3.size()<<endl;}
页: [1]
查看完整版本: 重温String类实现