亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

String簡單實現

發布時間:2020-09-18 18:52:00 來源:網絡 閱讀:434 作者:我是你帆哥 欄目:編程語言

String類的簡單實現:

1、在拷貝構造函數和賦值運算符重載這兩個函數中有淺拷貝和深拷貝的問題

2、要對輸入輸出函數重載

3、賦值運算符重載有兩種方式。注意在采用交換實現的時候函數的參數只能是臨時變量



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)                              //如果插入的位置在字符串結束之后,則不插入
		{
			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)               //如果總的字符數大于或等于容量,則擴容
		{
			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;                             //標記字符的個數
	int _capacity;                       //標記容量
};

ostream& operator<<(ostream& os, String& s)
{
	os<< s._str;
	return os;
}

istream& operator>>(istream& is, String& s)
{
	is >> s._str;
	return is;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪雅县| 包头市| 勐海县| 枝江市| 吕梁市| 博客| 峨眉山市| 白银市| 临汾市| 东港市| 岳普湖县| 平塘县| 嫩江县| 星座| 丰城市| 和林格尔县| 秭归县| 九龙坡区| 溧水县| 泸州市| 杂多县| 三都| 土默特左旗| 双牌县| 黄大仙区| 涿州市| 石狮市| 清流县| 扶余县| 嘉祥县| 仙桃市| 通州市| 时尚| 贡觉县| 汕尾市| 自治县| 遵义市| 宜都市| 吉林省| 安龙县| 彰武县|