设计一个字符串类重载“+=”的运算符,使其实现两个字符串的连接并赋值。试分别用成员函数和友元函数实现。
时间: 2024-02-22 19:58:52 浏览: 69
好的,下面分别给出使用成员函数和友元函数实现字符串类重载“+=”运算符的代码。
使用成员函数实现:
```cpp
#include <iostream>
#include <cstring>
class String {
public:
String(const char* str = "") {
if (str == nullptr) {
m_data = new char[1];
*m_data = '\0';
} else {
int len = strlen(str);
m_data = new char[len+1];
strcpy(m_data, str);
}
}
String(const String& other) {
int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data, other.m_data);
}
~String() {
delete[] m_data;
}
String& operator+=(const String& other) {
int len1 = strlen(m_data);
int len2 = strlen(other.m_data);
char* tmp = new char[len1+len2+1];
strcpy(tmp, m_data);
strcpy(tmp+len1, other.m_data);
delete[] m_data;
m_data = tmp;
return *this;
}
friend std::ostream& operator<<(std::ostream& os, const String& str);
private:
char* m_data;
};
std::ostream& operator<<(std::ostream& os, const String& str) {
os << str.m_data;
return os;
}
```
使用友元函数实现:
```cpp
#include <iostream>
#include <cstring>
class String {
public:
String(const char* str = "") {
if (str == nullptr) {
m_data = new char[1];
*m_data = '\0';
} else {
int len = strlen(str);
m_data = new char[len+1];
strcpy(m_data, str);
}
}
String(const String& other) {
int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data, other.m_data);
}
~String() {
delete[] m_data;
}
friend String& operator+=(String& str1, const String& str2);
friend std::ostream& operator<<(std::ostream& os, const String& str);
private:
char* m_data;
};
String& operator+=(String& str1, const String& str2) {
int len1 = strlen(str1.m_data);
int len2 = strlen(str2.m_data);
char* tmp = new char[len1+len2+1];
strcpy(tmp, str1.m_data);
strcpy(tmp+len1, str2.m_data);
delete[] str1.m_data;
str1.m_data = tmp;
return str1;
}
std::ostream& operator<<(std::ostream& os, const String& str) {
os << str.m_data;
return os;
}
```
在这两个实现中,我们都把字符串存储为一个字符数组,以便于进行字符串拼接。重载的“+=”运算符首先计算两个字符串的长度,然后申请新的字符数组用于存储拼接后的字符串。最后,把原有的字符串数组删除,把新的字符数组赋值给 m_data。友元函数则用于输出字符串对象的内容。
使用这两个类的示例代码如下:
使用成员函数:
```cpp
int main() {
String str1 = "Hello";
String str2 = " world!";
str1 += str2;
std::cout << str1 << std::endl;
return 0;
}
```
输出结果为:
```
Hello world!
```
使用友元函数:
```cpp
int main() {
String str1 = "Hello";
String str2 = " world!";
operator+=(str1, str2);
std::cout << str1 << std::endl;
return 0;
}
```
输出结果为:
```
Hello world!
```
希望这两个实现都能够解决你的问题!
阅读全文