class String{
public:
String(const char* = NULL); // 构造函数
~String(); // 析构函数
String(const String&); // 拷贝构造函数
String& operator=(const String&); // 赋值运算符
String& operator=(const char*); // 赋值运算符
inline const char* data() const{
return m_data;
}
String& operator+=(const String&);
String operator+(const String&) const;
String& operator+=(const char*);
String operator+(const char*) const;
private:
char* m_data;
};
String::String(const char* str){
if (NULL == str){
m_data = new char[1];
*m_data = '\0';
}
else {
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
}
}
String::~String(){
delete[] m_data;
}
String::String(const String& other){
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
}
String& String::operator=(const String& other){
if (this == &other){ // 判断自赋值
return *this;
}
delete[] m_data; // 释放
int length = strlen(other.m_data);
m_data = new char[length + 1]; // 申请
strcpy(m_data, other.m_data);
return *this;
}
String& String::operator=(const char* other){
delete[] m_data;
if (other == NULL){
m_data = new char[1];
*m_data = '\0';
}
else {
int length = strlen(other);
m_data = new char[length + 1];
strcpy(m_data, other);
}
return *this;
}
String& String::operator+=(const String& other){
char* tmp = m_data;
int length = strlen(m_data) + strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, tmp);
strcat(m_data, other.m_data);
delete[] tmp;
return *this;
}
String String::operator+(const String& other) const{
String result;
result += *this;
result += other;
return result;
}
String& String::operator+=(const char* other){
String tmp(other);
*this += tmp;
return *this;
}
String String::operator+(const char* other) const{
String result = *this;
result += other;
return result;
}
int main()
{
String s1("abc");
String s2(s1);
s1 = s1 + s2;
s1 += "efg";
cout << s1.data() << endl;
system("pause");
return 0;
}
String类的实现
最新推荐文章于 2023-05-03 09:48:09 发布