【C++札记】实现C++的string类

C++有了string类使得操作字符串变得很方便。有关string类,面试过程中也经常问到的就是自己实现一个sring类。下边实现个String类供大家参考:

String.h

#pragma once
class String
{
public:
	//构造函数
	String(const char* str = nullptr);
	
	//拷贝构造函数
	String(const String & another);

	//析构函数
	~String();

	//获得长度
	int size();

	//转换成char*
	char* c_str();

	//运算符重载=
	String& operator=(const String &str);

	//运算符重载+
	String operator+(const String &str) const;

	//运算符重载==
	bool operator==(const String &str);

	//运算符重载
	char& operator[](int index);

private:
	char* _str;
	int   len;
};

String.cpp

#include "String.h"
#include <string.h>

//构造函数
String::String(const char* str)
{
	if (str)
	{
		len = strlen(str);
		_str = new char[len + 1];
		strcpy_s(_str, len + 1, str);
	}
	else
	{
		len = 0;
		_str = new char[1]{ 0 };
	}
}

//拷贝构造函数
String::String(const String & another)
{
	_str = new char[another.len + 1];
	strcpy_s(_str, another.len + 1, another._str);
	len = another.len;
}

//析构函数
String::~String()
{
	if (_str)
	{
		delete[] _str;
		_str = NULL;
	}
}

//获取长度
int String::size()
{
	return len;
}

//转换成char*
char* String::c_str()
{
	return _str;
}

//运算符重载=
String& String::operator=(const String &str)
{
	if (this == &str)
	{
		return *this;
	}
	delete[] _str;
	_str = new char[str.len + 1]{ 0 };
	strcpy_s(_str, str.len + 1, str._str);
	return *this;
}

//运算符重载+
String String::operator+(const String &str) const
{
	String newString;
	newString.len = len + str.len;
	newString._str = new char[newString.len + 1];
	strcpy(newString._str, _str);
	strcat(newString._str, str._str);
	return newString;
}

//运算符重载==
bool String::operator==(const String &str)
{
	if (strcmp(_str, str._str) == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

//运算符重载[]
char& String::operator[](int index)
{
	if (index < len)
	{
		return _str[index];
	}
	else
	{
		return _str[len - 1];
	}
}

测试:

int main()
{
	String str1("wangpengfei"); //有参构造函数测试
	String str2(str1);			//拷贝构造函数测试

	String str3 = "wanghongyan";
	String str4 = " wangchouhou";
	String str5 = str3 + str4;	//重载运算符+测试
	cout << str3[0] << endl;	//重载运算符[]测试
	String str6 = "wanghongyan";
	if (str6 == str3)			//重载运算符==测试
	{
		cout << "str3 str6相等" << endl;
	}

	cout << str3.size() << endl;//成员函数size()测试	
	cout << str3.c_str() << endl;//成员函数c_str()测试
	

	getchar();
}

posted @ 2019-06-18 15:34  蜗牛201  阅读(123)  评论(0编辑  收藏  举报