为什么要进行操作符重载?
举个例子,正常的数字才可以进行加,如果对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;
}