c++ 赋值操作符的重载要点:
1.函数声明中,返回类型必须为类的引用:X& X::operator=(const X &x)
2.函数的结尾,必须用return *this(对象)来保证与内建的赋值操作符一致;
3.函数的参数建议采用const修饰的对象引用;
4.函数内必须考虑参数与该对象的内存地址重叠的问题(赋值运算的左右对象可能相同,即x=x的赋值方式);
头文件:String.h
#include <cstring>
#include <cstdio>
#define NULL 0
class String
{
public:
String(void);
virtual ~String(void);
String(const String &);
String(const char *);
String &operator=(const String &);
String &operator=(const char *);
public:
char *data;
};
源文件:String.cpp
#include "String.h"
String::String(void)
{
data = NULL;
}
String::~String(void)
{
delete []data;
data = NULL;
}
String::String(const char *s)
{
data = new char[strlen(s)+1];
strcpy(data, s);
}
String::String(const String &s)
{
data = new char[strlen(s.data)+1];
strcpy(data, s.data);
}
String& String::operator=(const String &s)
{
char *newchar = new char[strlen(s.data)+1];
strcpy(newchar, s.data);
delete []data;
data = newchar;
return *this;
}
String& String::operator=(const char *s)
{
char *newchar = new char[strlen(s)+1];
strcpy(newchar, s);
delete []data;
data = newchar;
return *this;
}