自定义String

来源:互联网 发布:怎样禁止下载软件 编辑:程序博客网 时间:2024/05/02 01:39

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <cstring>using namespace std;class String{public:String();String(const char* str);~String();String(const String& rhs);String& operator=(const String& rhs);String operator+(const String& rhs);char operator[](const unsigned int index);bool operator==(const String& rhs);friend ostream& operator<<(ostream& output, const String& rhs);//运算符重载使用友元函数int length();private:char* m_data;};String::String(){m_data = new char[1];m_data[0] = '0';}String::String(const char* str){if (str == NULL){m_data = new char[1];m_data[0] = '\0';}else{int len = strlen(str);m_data = new char[len + 1];//strcpy(m_data, str);  /*请弃用strcpy */sprintf_s(m_data, len+1, "%s", str);}}String::~String(){delete[] m_data; //或者delete m_data;}String::String(const String& rhs){int len = strlen(rhs.m_data);m_data = new char[len + 1];//strcpy(m_data, rhs.m_data);  /*请弃用strcpy */sprintf_s(m_data,len+1,"%s",rhs.m_data);}String& String::operator=(const String& rhs){if (this == &rhs){return *this;}delete[] m_data;int len = strlen(rhs.m_data) ;m_data = new char[len + 1];//strcpy(m_data, rhs.m_data);  /*请弃用strcpy */sprintf_s(m_data,len+1,"%s",rhs.m_data);return *this;}String String::operator+(const String& rhs){String tmp;delete tmp.m_data;//tmp.m_data包含了'0'这个字符int len = strlen(m_data) + strlen(rhs.m_data)+1;tmp.m_data = new char[len];sprintf_s(tmp.m_data, len , "%s", m_data);strcat_s(tmp.m_data, len, rhs.m_data);return tmp;}char String::operator[](const unsigned int index){return m_data[index];}bool String::operator==(const String& rhs){return 0 == strcmp(m_data, rhs.m_data);}ostream& operator<<(ostream& output, const String& rhs){output << rhs.m_data;return output;}int String::length(){return strlen(m_data);}int main(){const char* p = "hello,wcy";String s0 = "hello,wcy";String s1(p);String s2(s0);String s3 = s0;s1 = s1;s3 = s1;String s4 = s3 + s1;bool flag = (s1 == s2);cout << s0 << " "<<s0.length()<<endl;char s = s3[0];cout<<s<<endl;return 0;}




0 0
原创粉丝点击