Sting类的实现

为什么要进行操作符重载?

举个例子,正常的数字才可以进行加,如果对string进行+,实际上进行的是拼接的操作。那么这个时候,就需要对+进行操作符重载, 实现拼接的操作。‘


为什么赋值操作符(=)重载需要返回引用?
因为返回的是自己,而不是自己的一个拷贝。


什么是this指针?
this指针表示的类对象本身。它只作用在非静态成员函数中,作为一个隐藏参数。所以它的生命周期和正常的形参一样,在成员函数开始前构造,在结束时消除。


#include <iostream>
using namespace std;

class Mystring
{
	public:
		Mystring(const char*str = NULL);  //普通构造函数
		~Mystring();//析构函数
		Mystring(const Mystring&str);//拷贝构造函数		
		Mystring& operator=(const Mystring&str); //赋值函数
		Mystring operator+(const Mystring &str); //字符串连接
	private:
		char* m_data;
};

Mystring::Mystring(const char* str)
{
	if(str==NULL)
	{
		m_data = new char[1];
		m_data[0] = '\0';
	}else
	{
		m_data = new char[strlen(str)+1];
		strcpy(m_data,str);
	}

};

Mystring::~Mystring()
{
	delete []m_data;
};

Mystring::Mystring(const Mystring &str)
{
	m_data = new char[strlen(str.m_data)+1];
	strcpy(m_data,str.m_data);
};

Mystring& Mystring::operator=(const Mystring&str)
{
	if(m_data == str.m_data)
		return *this;
	delete [] m_data;
	m_data = new char[strlen(str.m_data)+1];
	strcpy(m_data,str.m_data);
	return *this;
};

Mystring Mystring::operator+(const Mystring&str)
{
	Mystring res;
	delete [] res.m_data;
	res.m_data = new char[strlen(m_data)+strlen(str.m_data)+1];
	res.m_data = strcpy(res.m_data,m_data);
	res.m_data = strcpy(res.m_data + strlen(m_data),str.m_data);
	return res;
}


你可能感兴趣的:(Sting类的实现)