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

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

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

在C++中,可以使用运算符重载的概念重载“+”运算符来连接两个字符串,使得代码更加简洁易懂。下面将介绍这个程序的实现方法。

实现步骤
  1. 定义一个字符串类,包含私有变量存储字符串内容和长度,公有方法获取和设置字符串内容。

    class MyString {
    private:
        char* str;
        int length;
    public:
        MyString(const char*);
        MyString(){}
        MyString(const MyString&);
        ~MyString();
        //其他方法省略
    };
    
  2. 为该类重载“+”运算符。

    MyString operator+(const MyString& str1, const MyString& str2) {
        MyString newStr;
        newStr.length = str1.length + str2.length;
        newStr.str = new char[newStr.length + 1];
        memcpy(newStr.str, str1.str, str1.length);
        memcpy(newStr.str + str1.length, str2.str, str2.length + 1);
        return newStr;
    }
    

    在重载运算符中,创建一个新字符串对象并为其分配存储空间。然后使用memcpy()函数将两个字符串拼接成一个新的字符串,并返回这个字符串对象。

  3. 在main函数中使用重载运算符。

    int main() {
        MyString str1("Hello");
        MyString str2("World");
        MyString str3 = str1 + str2;
        str3.display();
        return 0;
    }
    

    在main函数中,首先创建两个MyString对象,并将其传递给“+”运算符的重载函数来拼接新字符串。然后使用MyString类的display()方法来输出新的字符串。

完整代码
#include <cstring>
#include <iostream>

using namespace std;

class MyString {
private:
    char* str;
    int length;
public:
    MyString(const char*);
    MyString(){}
    MyString(const MyString&);
    ~MyString();
    void display() const { cout << str << endl; }
    friend MyString operator+(const MyString&, const MyString&);
};

MyString::MyString(const char* s) {
    length = strlen(s);
    str = new char[length + 1];
    strcpy(str, s);
}

MyString::MyString(const MyString& old_str) {
    length = old_str.length;
    str = new char[length];
    memcpy(str, old_str.str, length);
}

MyString::~MyString() {
    if (str != NULL) delete[] str;
}

MyString operator+(const MyString& str1, const MyString& str2) {
    MyString newStr;
    newStr.length = str1.length + str2.length;
    newStr.str = new char[newStr.length + 1];
    memcpy(newStr.str, str1.str, str1.length);
    memcpy(newStr.str + str1.length, str2.str, str2.length + 1);
    return newStr;
}

int main() {
    MyString str1("Hello");
    MyString str2("World");
    MyString str3 = str1 + str2;
    str3.display();
    return 0;
}
结论

通过上述方法,我们可以使用运算符重载来连接两个字符串,使得代码更加简洁易懂。