class MyString { public: string m_Str;}重载+使MyString类型的对象能够相加
时间: 2023-06-18 12:06:26 浏览: 99
可以通过重载运算符+来实现MyString类型的对象相加。具体实现如下:
```c++
class MyString {
public:
string m_Str;
MyString operator+(const MyString& other) const {
MyString result;
result.m_Str = m_Str + other.m_Str;
return result;
}
};
```
在这个实现中,我们重载了运算符+,它接受另一个MyString类型的对象作为参数,并返回一个新的MyString类型的对象,这个新的对象的m_Str成员变量是两个操作对象的m_Str相加的结果。这样,我们就可以愉快地对MyString类型的对象进行相加操作了。
相关问题
class myString: def __init__(self, string): self.string = string def __lt__(self, other): return self.string < other.string def __gt__(self, other): return self.string > other.string def __eq__(self, other): return self.string == other.stringstr1 = myString("怀化学院")str2 = myString("怀化师专")if str1 > str2: print("怀化学院大于怀化师专")elif str1 < str2: print("怀化学院小于怀化师专")else: print("怀化学院等于怀化师专")
输出结果为:"怀化学院小于怀化师专"
解释:在自定义的myString类中,实现了 __lt__、__gt__、__eq__ 三个比较运算符的重载。在比较两个myString对象时,会根据字符串的字典序进行比较。因为 "学" 的 Unicode 编码比 "师" 的小,所以 "怀化学院" 的字典序比 "怀化师专" 小,返回结果为 "怀化学院小于怀化师专"。
在MyString类的基础上完成一下功能: 重载运算符:+、+=、=、[]、>、<、>=、<=、== class MyString{ private: char *m_data; public: MyString(const char *str = 0); MyString(const MyString& rhs); ~MyString(); };C++,完整代码加中文注释
以下是基于MyString类完成运算符重载的完整代码,附带中文注释:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
private:
char *m_data;
public:
MyString(const char *str = 0) {
// 构造函数,初始化字符串
if (str == 0) {
m_data = new char[1];
*m_data = '\0';
} else {
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
}
}
MyString(const MyString& rhs) {
// 拷贝构造函数
int length = strlen(rhs.m_data);
m_data = new char[length + 1];
strcpy(m_data, rhs.m_data);
}
~MyString() {
// 析构函数,释放内存
delete [] m_data;
}
MyString& operator=(const MyString& rhs) {
// 重载赋值运算符
if (this != &rhs) {
delete [] m_data;
int length = strlen(rhs.m_data);
m_data = new char[length + 1];
strcpy(m_data, rhs.m_data);
}
return *this;
}
char& operator[](unsigned int index) {
// 重载下标运算符
return m_data[index];
}
bool operator>(const MyString& rhs) {
// 重载大于运算符
return strcmp(m_data, rhs.m_data) > 0;
}
bool operator<(const MyString& rhs) {
// 重载小于运算符
return strcmp(m_data, rhs.m_data) < 0;
}
bool operator>=(const MyString& rhs) {
// 重载大于等于运算符
return strcmp(m_data, rhs.m_data) >= 0;
}
bool operator<=(const MyString& rhs) {
// 重载小于等于运算符
return strcmp(m_data, rhs.m_data) <= 0;
}
bool operator==(const MyString& rhs) {
// 重载等于运算符
return strcmp(m_data, rhs.m_data) == 0;
}
MyString operator+(const MyString& rhs) {
// 重载加号运算符
int length = strlen(m_data) + strlen(rhs.m_data);
char *temp = new char[length + 1];
strcpy(temp, m_data);
strcat(temp, rhs.m_data);
MyString result(temp);
delete [] temp;
return result;
}
MyString& operator+=(const MyString& rhs) {
// 重载加等于运算符
int length = strlen(m_data) + strlen(rhs.m_data);
char *temp = new char[length + 1];
strcpy(temp, m_data);
strcat(temp, rhs.m_data);
delete [] m_data;
m_data = temp;
return *this;
}
friend ostream& operator<<(ostream& os, const MyString& str) {
// 重载输出运算符
os << str.m_data;
return os;
}
};
int main() {
// 测试运算符重载
MyString str1("Hello");
MyString str2("World");
MyString str3 = str1 + str2;
MyString str4 = str1;
str4 += str2;
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
cout << (str1 > str2) << endl;
cout << (str1 < str2) << endl;
cout << (str1 >= str2) << endl;
cout << (str1 <= str2) << endl;
cout << (str1 == str2) << endl;
cout << str1[0] << endl;
cout << str2[1] << endl;
return 0;
}
```
阅读全文