📜  C++程序使用运算符重载连接两个字符串(1)

📅  最后修改于: 2023-12-03 14:59:52.189000             🧑  作者: Mango

C++程序使用运算符重载连接两个字符串

在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;
}

该函数接受两个参数 lhsrhs,分别代表需要进行连接操作的两个字符串对象。在函数体内部,我们使用了 strcpy()strcat() 方法将 lhsrhs 的值拼接到 result 中,最终返回连接完毕的 result 对象。

运算符重载使用

对于两个字符串对象 str1str2,我们可以使用加号运算符 + 对它们进行连接操作。代码示例如下:

int main() {
    String str1("Hello, ");
    String str2("world!");
    String result = str1 + str2;
    std::cout << result.value() << std::endl;
    return 0;
}

上述代码中,我们首先声明了 str1str2 两个字符串对象,然后在 main() 函数中使用运算符重载方法将它们连接起来,赋值给新的字符串对象 result 中。最后输出 result 中存储的内容到控制台中,得到的结果为:

Hello, world!

至此,我们已经完成了通过运算符重载连接两个字符串的操作,实现了代码的简洁优雅。