c++自定义String类

自己做测试用的,就当作是c++的一个简单的复习吧,这个string类只实现了一些简单的功能,别的功能后续会慢慢加上的

String.h头文件


#include <iostream>

const int maxlen = 128;

using namespace std;

class String
{
private:
	char *m_data;
public:
	String();  //默认构造函数
	String(const char *str);  
	String(const String &obj);
	~String(); //析构函数
	String operator= (const String &obj); //赋值操作符
	String & operator= (char *str);     
	int operator==(String &other);  //重载判断操作符
	friend ostream &operator<<(ostream &output, String &obj); //ostream输出流重载
	friend istream &operator>>(istream&input,String &obj);    //istream输入流重载

};
String::String()
{
	m_data = new char[maxlen];
}
String::String(const char *str)
{
	int len = strlen(str);
	m_data = new char[len+1];
	if(!m_data)
	{
		cerr<<"Error!"<<endl;
		exit(1);
	}
	strcpy(m_data,str);
}
String::~String()
{
	delete m_data;
}

String::String(const String &obj)
{
	int len = strlen(obj.m_data);
	m_data = new char[len+1];
	if (!m_data)
	{
		cerr<<"Error!"<<endl;
		exit(1);
	}
	strcpy(m_data,obj.m_data);
}

String String::operator=(const String &obj)
{
	int len = strlen(obj.m_data);
	m_data = new char[len+1];
	if (!m_data)
	{
		cerr<<"Error!"<<endl;
		exit(1);
	}
	strcpy(m_data,obj.m_data);
	return *this;
}

String & String::operator= (char *str)
{
	int len = strlen(str);
	m_data = new char[len+1];
	if (!m_data)
	{
		cerr<<"Error!"<<endl;
		exit(1);
	}
	strcpy(m_data,str);
	return *this;
}


int String::operator==(String &other)
{
	return strcmp(other.m_data,this->m_data);
}

ostream &operator<<(ostream &out,String &obj)
{
	out<<obj.m_data;
	return out;
}

istream &operator>>(istream &input,String &obj)
{
	input>>obj.m_data;
	return input;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注