C++字符串的重载

来源:互联网 发布:淘宝网舞鞋 编辑:程序博客网 时间:2024/06/05 17:37
#include<iostream>#include<string.h>using namespace std;class String{public:String(){m_data = new char;m_data[0] = '\0';}String(unsigned int length){m_data = new char[length+1];m_data[0] = '\0';}    String(char *str)//初始化    { m_data = new char[strlen(str)+1];strcpy(m_data,str);    }    String(const String &ch) //拷贝构造    {               m_data = new char[strlen(ch.m_data)+1];        strcpy(m_data,ch.m_data);    }    String& operator = (const String &ch)//赋值 &    {        if(this == &ch)return *this;delete []m_data;m_data = new char[strlen(ch.m_data)+1];strcpy(m_data,ch.m_data);return *this;    }friend bool operator > (const String &ch1,const String &ch2){return strcmp(ch1.m_data,ch2.m_data) > 0;}friend bool operator < (const String &ch1,const String &ch2){return strcmp(ch1.m_data,ch2.m_data) < 0;}friend bool operator == (const String &ch1,const String &ch2){cout<<"equal~~~!"<<endl;return strcmp(ch1.m_data,ch2.m_data)==0;}friend bool operator != (const String &ch1,const String &ch2){cout<<"Not equal~~!"<<endl;return (strcmp(ch1.m_data,ch2.m_data)==0) ? true:false;}String operator+(const String &ch){char *str;str = new char[strlen(m_data)+strlen(ch.m_data)+1];strcpy(str,m_data);strcat(str,ch.m_data);String tmp(str);delete []str;return tmp;/*String tmp;tmp.m_data = new char[strlen(m_data)+strlen(ch.m_data)+1];strcpy(tmp.m_data,m_data);strcat(tmp.m_data,ch.m_data);return tmp;*/}String operator+=(const String &ch){*this = *this->m_data + ch.m_data;return *this;/*String tmp;tmp.m_data = new char[strlen(m_data)+strlen(ch.m_data)+1];strcpy(tmp.m_data,m_data);strcat(tmp.m_data,ch.m_data);*this = tmp;return *this;*/}char& operator[](int index){return m_data[index];}friend ostream& operator<<(ostream& os,const String &str){os<<str.m_data;return os;}friend istream& operator>>(istream& is,const String &str){is>>str.m_data;return is;}    ~String()    {        delete []m_data;    }private:    char* m_data;};


void main(){String ch1;String ch6(10);String str("j");ch6 = "sdfsfsdfsfs";String ch(str);ch1 = str;//cout<<(str+ch1)<<endl;ch = str + ch1 ;//cout<<ch<<endl;String ch2; ch2+=ch; cout<<ch2<<endl; ch1 != ch2; ch[2]; cout<<str<<endl;cin>>ch1; //cin以空格为一次读取标记 cout<<ch1<<endl;}



0 0
原创粉丝点击