已知C++string类原型如下 class String { private: char* pStr; public: String(char* p = nullptr); ~String(); String(String& s); String operator+(String& obj); }; 请实现它的成员函数
时间: 2023-11-12 07:27:26 浏览: 70
好的,我来实现一下这个类的成员函数。
```cpp
#include <cstring>
#include <iostream>
using namespace std;
class String {
private:
char* pStr;
public:
String(char* p = nullptr) {
if (p == nullptr) {
pStr = new char[1];
*pStr = '\0';
} else {
int len = strlen(p);
pStr = new char[len + 1];
strcpy(pStr, p);
}
}
~String() {
delete[] pStr;
}
String(String& s) {
int len = strlen(s.pStr);
pStr = new char[len + 1];
strcpy(pStr, s.pStr);
}
String operator+(String& obj) {
int len1 = strlen(pStr);
int len2 = strlen(obj.pStr);
char* tmp = new char[len1 + len2 + 1];
strcpy(tmp, pStr);
strcat(tmp, obj.pStr);
String ret(tmp);
delete[] tmp;
return ret;
}
friend ostream& operator<<(ostream& os, const String& str) {
os << str.pStr;
return os;
}
};
```
在上面的代码中,我们实现了String类的构造函数、析构函数、复制构造函数和"+"运算符的重载函数。其中,构造函数根据传入的字符串长度动态分配内存并进行字符串复制;析构函数释放动态分配的内存;复制构造函数也是根据传入的字符串长度动态分配内存并进行字符串复制;"+"运算符重载函数则是根据两个字符串长度进行动态内存分配,拼接后返回一个新的String对象。另外,我们还定义了一个友元函数重载运算符"<<", 用于输出String类型对象的值。
阅读全文