#include <iostream>
#include <cstring>
class Mystring {
public:
// 默认构造函数
Mystring() : str(nullptr), len(0) {}
// 构造函数,接收一个 C 风格字符串
Mystring(const char* s) {
len = strlen(s);
str = new char[len + 1]; // 需要额外的空间存储 null 终止符
strcpy(str, s);
}
// 拷贝构造函数
Mystring(const Mystring &other) {
len = other.len;
str = new char[len + 1]; // 需要额外的空间存储 null 终止符
strcpy(str, other.str);
}
// 拷贝赋值运算符
Mystring& operator=(const Mystring &other) {
if (this != &other) { // 自我赋值检查
delete[] str; // 释放原有资源
len = other.len;
str = new char[len + 1]; // 需要额外的空间存储 null 终止符
strcpy(str, other.str);
}
return *this;
}
// 析构函数
~Mystring() {
if (nullptr != str)
delete[] str;
}
// 返回字符串数据的指针
const char* data() const {
return str;
}
// 返回字符串的长度
size_t size() const {
return len;
}
// 判断字符串是否为空
bool empty() const {
return len == 0;
}
private:
char *str;
int len;
};
// 测试函数
void test_mystring() {
Mystring s1("Hello, World!");
Mystring s2(s1);
Mystring s3;
s3 = s1;
std::cout << "s1: " << s1.data() << ", length: " << s1.size() << std::endl;
std::cout << "s2: " << s2.data() << ", length: " << s2.size() << std::endl;
std::cout << "s3: " << s3.data() << ", length: " << s3.size() << std::endl;
}
int main() {
test_mystring();
return 0;
}