string类实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string类实现相关的知识,希望对你有一定的参考价值。

string类

写法一:

class String
{
public:
	String()//构造函数,当str为空字符串时
	{
		_str = new char[1];
		*_str = ‘\0‘;
		cout << "string()" << endl;
	}
	String(char* str)//构造函数
		:_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间
	{
		strcpy(_str, str);
		cout << "构造" << endl;

	}
	~String()//析构函数
	{
		delete[]_str;//new[]要用delete[]释放
		cout << "析构" << endl;

	}
	String(const String& str)//拷贝构造函数
		:_str(new char[strlen(str._str) + 1])
	{
		strcpy(_str, str._str);
		cout << "拷贝" << endl;
	}
	String& operator=(const String& str)//重载=
	{
		if (this != &str)//判断自赋值
		{
			delete[]_str;//释放原空间
			_str = new char[strlen(str._str) + 1];//开辟新空间
			strcpy(_str, str._str);//复制
			return *this;
		}
		cout << "重载" << endl;

	}
private:
	char* _str;
};

写法二

简化
class String
{
public:
	String()//构造函数,当str为空字符串时
	{
		_str = new char[1];
		*_str = ‘\0‘;
		cout << "string()" << endl;
	}
	String(char* str)//构造函数
		:_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间
	{
		strcpy(_str, str);
		cout << "构造" << endl;

	}
	~String()//析构函数
	{
		delete[]_str;//new[]要用delete[]释放
		cout << "析构" << endl;

	}
	String(const String& str)//拷贝构造函数
		:_str(NULL)
	{
		String tmp(str._str);
		swap(_str, tmp._str);
	}
	//String& operator=(const String& str)//写法一
	//{
	//	if (this != &str)//判断自赋值
	//	{
	//		String tmp(_str);
	//		swap(_str, tmp._str);
	//	}
	//	cout << "重载" << endl;
	//	return*this;
	//}
	String& operator=(String str)//写法二    
	{
		swap(_str, str._str);
		return *this;
	}
	bool operator==(const String& s)
	{

	}
private:
	char* _str;
};

写法三:

class String
{
public:
	String(char*str="")
		:_str(new char[strlen(str)+5])
	{
		*(int*)_str = 1;
		_str += 4;
		strcpy(_str, str);
	}
	~String()
	{
		if (_str != NULL)
		{
			if (--*(int*)(_str - 4))
			{
				delete[](_str - 4);
			}
		}
	}
	String(const String& str)
		:_str(str._str)
	{
		++*(int*)(_str - 4);
	}
	String& operator=(const String& str)
	{
		if (this != &str)//自赋值检查
		{
			if (--*(int*)(_str - 4) == 0)
			{
				delete[](_str - 4);
			}
			_str = str._str;
			++*(int*)(_str - 4);
		}
		return *this;
	}
private:
	char *_str;
};


本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1750023

以上是关于string类实现的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

从片段类中的对话框添加项目到recyclerview。

片段中 ListView 的 setOnItemClickListener

片段中ListView的setOnItemClickListener

java 代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段