📅  最后修改于: 2023-12-03 14:59:52.189000             🧑  作者: Mango
在C++中,我们可以通过运算符重载来自定义对两个字符串的连接操作,使得代码更加简洁优雅。以下是实现该功能的一组代码示例:
首先,我们需要定义一个字符串类,包含字符串的相关属性和方法:
#include <cstring>
#include <iostream>
class String {
public:
String() {}
String(const char* str) {
len = strlen(str);
data = new char[len + 1];
strcpy(data, str);
}
String(const String& obj) {
len = obj.len;
data = new char[len + 1];
strcpy(data, obj.data);
}
~String() {
delete[] data;
}
int length() const {
return len;
}
char* value() {
return data;
}
friend String operator+(const String&, const String&);
private:
int len;
char* data;
};
该类包含以下属性和方法:
len
: 存储字符串长度的变量(int
类型);data
: 存储字符串内容的指针(char*
类型);String()
: 默认构造函数,无需进行初始化;String(const char* str)
: 带参构造函数,将传入的C字符串转换为自定义字符串类的对象;String(const String& obj)
: 拷贝构造函数,复制自定义字符串类的对象;~String()
: 析构函数,释放自定义字符串类的对象占用的内存;length()
: 返回字符串长度的方法;value()
: 返回存储字符串内容的指针;operator+()
: 定义运算符重载函数,在两个字符串对象之间进行连接操作。在上述自定义字符串类中,我们定义了一个公共函数 operator+()
用于连接两个字符串对象。该方法的实现代码如下:
String operator+(const String& lhs, const String& rhs) {
String result;
result.len = lhs.len + rhs.len;
result.data = new char[result.len + 1];
strcpy(result.data, lhs.data);
strcat(result.data, rhs.data);
return result;
}
该函数接受两个参数 lhs
和 rhs
,分别代表需要进行连接操作的两个字符串对象。在函数体内部,我们使用了 strcpy()
和 strcat()
方法将 lhs
和 rhs
的值拼接到 result
中,最终返回连接完毕的 result
对象。
对于两个字符串对象 str1
和 str2
,我们可以使用加号运算符 +
对它们进行连接操作。代码示例如下:
int main() {
String str1("Hello, ");
String str2("world!");
String result = str1 + str2;
std::cout << result.value() << std::endl;
return 0;
}
上述代码中,我们首先声明了 str1
和 str2
两个字符串对象,然后在 main()
函数中使用运算符重载方法将它们连接起来,赋值给新的字符串对象 result
中。最后输出 result
中存储的内容到控制台中,得到的结果为:
Hello, world!
至此,我们已经完成了通过运算符重载连接两个字符串的操作,实现了代码的简洁优雅。