重载+ 增加数据,增加数据要实现的形态: “123456789” + “abc” 得到 “123456789abc” 最多new一次)
时间: 2023-10-10 13:15:48 浏览: 220
用c++ 编写一个程序,重载运算符“+”,实现字符串的连接。
5星 · 资源好评率100%
好的,针对您的要求,可以使用如下的代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString(const char* str = nullptr) {
if (str == nullptr) {
// 如果传入的字符串为 nullptr,则默认初始化为空串
m_data = new char[1];
m_data[0] = '\0';
} else {
// 否则,根据传入的字符串长度进行初始化
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
}
~MyString() {
delete[] m_data;
}
// 重载 + 运算符
MyString operator+(const MyString& str) {
// 计算新字符串的长度
int len1 = strlen(m_data);
int len2 = strlen(str.m_data);
char* new_data = new char[len1 + len2 + 1];
// 拷贝原字符串
strcpy(new_data, m_data);
// 拼接新字符串
strcat(new_data, str.m_data);
// 返回新字符串
return MyString(new_data);
}
// 获取字符串数据
char* getData() {
return m_data;
}
private:
char* m_data;
};
int main() {
MyString str1("123456789");
MyString str2("abc");
// 进行字符串拼接
MyString str3 = str1 + str2;
// 输出结果
cout << str3.getData() << endl;
return 0;
}
```
在上面的代码中,我们定义了一个 `MyString` 类,其中包含了一个 `char*` 类型的成员变量 `m_data` 用于存储字符串数据。在类的构造函数中,我们根据传入的字符串长度进行了初始化,如果传入的字符串为 `nullptr`,则默认初始化为空串。
在重载 `+` 运算符时,我们首先计算新字符串的长度,然后申请一块新的内存用于存储新字符串。接着,我们先将原字符串拷贝到新的内存中,再将要拼接的字符串拼接到新的内存中。最后,我们返回一个新的 `MyString` 对象,其数据为新的字符串。
在 `main` 函数中,我们首先创建了两个 `MyString` 类型的对象 `str1` 和 `str2`,分别存储了字符串 "123456789" 和 "abc"。接着,我们对这两个字符串进行拼接,得到了一个新的字符串 `str3`。最后,我们输出了拼接后的结果。
需要注意的是,我们在重载 `+` 运算符时,返回的是一个 `MyString` 对象,因此需要在类中定义一个拷贝构造函数,用于拷贝对象的数据。此外,为了避免内存泄漏,我们在类的析构函数中需要释放 `m_data` 所指向的内存。
阅读全文