重载+运算符,+字符串常量的函数
时间: 2023-07-08 12:43:04 浏览: 99
一个字符串类-c++学习资料
在C++中,可以通过重载 "+" 运算符来实现字符串的拼接操作。为了能够实现将字符串常量和字符串对象进行拼接,我们需要在类中重载两个版本的 "+" 运算符,分别用于实现字符串对象+字符串对象和字符串对象+字符串常量的拼接。其中,字符串常量作为实参时,需要先将其转换为字符串对象。
下面是一个重载"+"运算符、"+"运算符的示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString(const char* str) {
data_ = new char[strlen(str) + 1];
strcpy(data_, str);
}
MyString operator+(const MyString& rhs) const {
char* new_data = new char[size() + rhs.size() + 1];
strcpy(new_data, data_);
strcat(new_data, rhs.data_);
MyString result(new_data);
delete[] new_data;
return result;
}
MyString operator+(const char* rhs) const {
MyString rhs_str(rhs);
return operator+(rhs_str);
}
size_t size() const {
return strlen(data_);
}
const char* c_str() const {
return data_;
}
~MyString() {
delete[] data_;
}
private:
char* data_;
};
int main() {
MyString str1("Hello, ");
MyString str2("world!");
MyString str3 = str1 + str2;
MyString str4 = str1 + "C++";
cout << str3.c_str() << endl; // 输出 "Hello, world!"
cout << str4.c_str() << endl; // 输出 "Hello, C++"
return 0;
}
```
在上面的代码中,我们定义了一个 `MyString` 类,其中包含了一个 `data_` 成员变量,它指向一个动态分配的字符数组。我们通过重载两个版本的 "+" 运算符来实现字符串的拼接操作,其中第一个版本用于实现字符串对象+字符串对象的拼接,第二个版本用于实现字符串对象+字符串常量的拼接。在第二个版本中,我们先将字符串常量转换为字符串对象,然后再调用第一个版本的 "+" 运算符进行拼接。
在 `main()` 函数中,我们分别创建了两个字符串对象 `str1` 和 `str2`,然后通过 `str1 + str2` 和 `str1 + "C++"` 的方式进行拼接。最后输出拼接后的结果。
阅读全文