成员函数(访问权限定义为public): •默认构造函数:初始化成一个空串 Stringu); •带参数的构造函数:根据参数内容初始化字符串 String(constchar * content); •拷贝构造函数:初始化宇符串 String(constString& cstr); •析构函数:释放堆空间 ~string(); •重载赋值运算符 = (只能作为类成员函数重载) String & operator=(constString & cstr); 注意:在类中对运算符重载函数进行友元函数声明!!
时间: 2023-11-22 11:52:45 浏览: 76
以下是对应的代码实现:
```
class String {
public:
// 默认构造函数
String();
// 带参数的构造函数
String(const char* content);
// 拷贝构造函数
String(const String& cstr);
// 析构函数
~String();
// 重载赋值运算符
String& operator=(const String& cstr);
private:
// 字符串的实际存储空间
char* str;
// 字符串的长度
int len;
};
// 友元函数声明,以便在类外实现
std::ostream& operator<<(std::ostream& os, const String& cstr);
```
接下来是对应的函数实现:
```
#include <cstring>
#include <iostream>
#include "string.h"
// 默认构造函数
String::String() : str(nullptr), len(0) {}
// 带参数的构造函数
String::String(const char* content) {
len = strlen(content);
str = new char[len + 1];
strcpy(str, content);
}
// 拷贝构造函数
String::String(const String& cstr) {
len = cstr.len;
str = new char[len + 1];
strcpy(str, cstr.str);
}
// 析构函数
String::~String() {
if (str != nullptr) {
delete[] str;
str = nullptr;
len = 0;
}
}
// 重载赋值运算符
String& String::operator=(const String& cstr) {
// 注意自赋值的情况
if (this == &cstr) {
return *this;
}
// 先释放原有的内存
if (str != nullptr) {
delete[] str;
}
// 分配新的内存空间
len = cstr.len;
str = new char[len + 1];
// 复制内容
strcpy(str, cstr.str);
return *this;
}
// 友元函数实现,输出字符串
std::ostream& operator<<(std::ostream& os, const String& cstr) {
os << cstr.str;
return os;
}
```
阅读全文