用C++编写下面程序:运用友元函数,设计一个字符串类重载“+=”的运算符,使其实现两个字符串的连接并赋值。
时间: 2024-02-15 18:04:49 浏览: 82
以下是用C++实现字符串类重载“+=”运算符的友元函数的代码:
```c++
#include <iostream>
#include <cstring>
class String {
private:
char* str;
int len;
public:
String() : len(0), str(nullptr) {}
String(const char* s) : len(std::strlen(s)), str(new char[len + 1]) {
std::strcpy(str, s);
}
String(const String& s) : len(s.len), str(new char[len + 1]) {
std::strcpy(str, s.str);
}
~String() {
delete[] str;
}
friend String operator+=(String& s1, const String& s2);
const char* c_str() const {
return str;
}
};
String operator+=(String& s1, const String& s2) {
char* temp = new char[s1.len + s2.len + 1];
std::strcpy(temp, s1.str);
std::strcat(temp, s2.str);
s1.len += s2.len;
delete[] s1.str;
s1.str = temp;
return s1;
}
int main() {
String s1("Hello"), s2("World");
s1 += s2;
std::cout << s1.c_str() << std::endl; // 输出:HelloWorld
return 0;
}
```
在上面的代码中,我们定义了一个名为“String”的字符串类,其中包含一个指向字符数组的指针“str”和一个表示字符串长度的整数“len”。我们使用了标准C++库中的函数来处理字符串,如std::strlen()、std::strcpy()和std::strcat()等。
在String类中,我们声明了一个名为“operator+=()”的友元函数,以便它可以访问String类的私有成员变量。在“operator+=()”函数实现中,我们将两个字符串连接起来,并将结果赋值给第一个字符串对象“s1”。
在主函数中,我们创建了两个String对象“s1”和“s2”,并使用“+=”运算符将它们连接起来。最后,我们使用“c_str()”函数将连接后的字符串打印到屏幕上。
阅读全文