String類的簡單實現(xiàn):
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比江都網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式江都網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋江都地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
1、在拷貝構(gòu)造函數(shù)和賦值運算符重載這兩個函數(shù)中有淺拷貝和深拷貝的問題
2、要對輸入輸出函數(shù)重載
3、賦值運算符重載有兩種方式。注意在采用交換實現(xiàn)的時候函數(shù)的參數(shù)只能是臨時變量
class String { friend ostream& operator<<(ostream& os, String& s); friend istream& operator>>(istream& is, String& s); public: String(char *str="") :_sz(strlen(str)) , _capacity(strlen(str)+1) ,_str(new char [strlen(str)+1]) { cout << "String()" << endl; strcpy(_str,str); } String(const String& s) :_sz(strlen(s._str)) , _capacity(strlen(s._str) + 1) ,_str(new char [strlen(s._str)+1]) { cout << "String(const String&)" << endl; strcpy(_str,s._str); } String& operator=(String s) { _sz = s._sz; _capacity = s._capacity; swap(_str,s._str); return *this; } //String& operator=(const String& s) //{ // // if (_str != s._str) // { // cout << "String& operator=" << endl; // delete[] _str; // _str = new char[strlen(s._str) + 1]; // strcpy(_str, s._str); // } // return *this; //} ~String() { cout << "~String()" << endl; delete[] _str; _str = NULL; _sz = 0; _capacity = 0; } public: char* C_str()const { return _str; } void PushBack(char c) //尾插一個字符 { GetCapacity(1); _str[_sz++] = c; _str[_sz] = '\0'; } String& Insert(int posl, const String& s) //在指定位置插入一個字符串 { int count = strlen(s._str); if (posl<=_sz) //如果插入的位置在字符串結(jié)束之后,則不插入 { GetCapacity(count); int j = _sz + count; for (int i = _sz; i >= posl; i--, j--) { _str[j] = _str[i]; } strncpy(_str + posl, s._str, count); } _sz += count; return *this; } char& operator[](size_t posl) { return _str[posl]; } private: void GetCapacity(int count) //得到擴容后的空間 { if ((_sz+count) >= _capacity) //如果總的字符數(shù)大于或等于容量,則擴容 { int NewCapacity = (2 * _capacity) > (_capacity + count) ? (2 * _capacity) : (_capacity + count); char *tmp = new char[NewCapacity]; strcpy(tmp, _str); delete[] _str; _str = tmp; _capacity = NewCapacity; } } private: char *_str; int _sz; //標(biāo)記字符的個數(shù) int _capacity; //標(biāo)記容量 }; ostream& operator<<(ostream& os, String& s) { os<< s._str; return os; } istream& operator>>(istream& is, String& s) { is >> s._str; return is; }