#include <iostream> using namespace std; class String{ public: String(const char *str = NULL);//默认构造函数 String(const String &str);//复制构造函数 ~String();//析构函数 String operator+(const String & str);//字符串连接 String & operator=(const String &str);//字符串赋值 bool operator==(const String &str);//判断是否字符串相等 int Length();//获取字符串长度 friend ostream & operator<<(ostream &o,const String &str);//重载输出 String SubStr(int start, int end);//求子字符串(start ... end-1) private: char * charArray; }; String::String(const char *str) { if(str == NULL){ charArray=new char[1]; charArray[0]=‘\0‘; }else{ charArray=new char[strlen(str)+1]; strcpy(charArray,str); } } String::String(const String &str) { charArray = new char[strlen(str.charArray)+1]; strcpy(charArray,str.charArray); } String::~String() { delete [] charArray; } String String::operator+(const String &str) { String res; delete [] res.charArray;//释放原有空间 res.charArray = new char[strlen(charArray)+strlen(str.charArray)+1]; strcpy(res.charArray,charArray); strcpy(res.charArray+strlen(charArray),str.charArray); return res; } String & String::operator=(const String &str) { if(charArray == str.charArray) return *this; delete [] charArray; charArray = new char[strlen(str.charArray)+1]; strcpy(charArray,str.charArray); return *this; } bool String::operator==(const String &str) { return strcmp(charArray,str.charArray) == 0; } int String::Length() { return strlen(charArray); } ostream & operator<<(ostream &o, const String &str) { o<<str.charArray; return o; } String String::SubStr(int start, int end) { String res; delete [] res.charArray;//释放原有内存 res.charArray = new char[end-start+1];//重新申请内存 for(int i=0; i+start<end; i++){ res.charArray[i]=charArray[start+i]; } res.charArray[end-start] = ‘\0‘; return res; } void test() { String s = "abcd"; String t = "abcd"; cout<<s<<(s==t?" == ":" != ")<<t<<endl; String s2 = "Hello "; String s3 = "China!"; cout<<s2+s3<<endl; cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl; } int main() { test(); system("pause"); }
String类的实现,内部采用字符数组实现,布布扣,bubuko.com
原文:http://www.cnblogs.com/de0319gh/p/3597631.html