定义一个字符串类d的数据成员如下,完成赋值运算符=和字符串连接 +运算符的重载 class string{ int Length; char *Str;};
时间: 2024-11-09 20:26:39 浏览: 41
在C++中,你可以通过重载赋值运算符`=`和加法运算符`+`来扩展`string`类的行为。这里是一个简单的例子,如何完成这两个运算符的重载:
```cpp
class String {
private:
int length;
char* str;
public:
// 构造函数和析构函数
String(int len = 0) : length(len), str(new char[length]) {}
~String() { delete[] str; } // 释放内存
// 赋值运算符重载
String& operator=(const String& other) {
if (this != &other) {
delete[] str;
length = other.length;
str = new char[length];
std::strcpy(str, other.str); // 深拷贝字符串内容
}
return *this;
}
// 字符串连接运算符重载
String operator+(const String& other) const {
int totalLength = length + other.length + 1; // 加一用于存储空字符'\0'
char* result = new char[totalLength]; // 新建足够长度的数组
std::strcat(result, str); // 连接当前字符串
std::strcat(result, other.str);
result[totalLength - 1] = '\0'; // 添加结束标志'\0'
String combined(totalLength - 1); // 创建新的String并填充结果
combined.str = result;
return combined;
}
};
// 使用示例
String s1(5); // s1 = "Hello"
s1 = " World"; // s1 = "Hello World"
String s2(4); // s2 = "C++"
String s3 = s1 + s2; // s3 = "Hello World C++"
```
在这个例子中,赋值运算符实现了浅拷贝(如果其他对象和自身指向的是同一个内存区域,则会直接复制引用),而连接运算符则创建了两个字符串的新组合。
阅读全文