资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

String简单实现-创新互联

String类的简单实现:

创新互联建站是一家专业提供晋中企业网站建设,专注与成都网站设计、网站建设、外贸网站建设H5建站、小程序制作等业务。10年已为晋中众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

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;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:String简单实现-创新互联
文章地址:http://cdkjz.cn/article/ccjcpd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220