class String
{
public:
//赋值构造函数
String(const char str[]) {
if (str == nullptr) {
data = new char[1];
data = '\0';
}
else {
data = new char[strlen(str) + 1];
strcpy(data, str);
this->length = strlen(str);
}
}
//拷贝构造函数
String(const String& str) {
if (str.data == nullptr) {
this->data = new char[1];
this->data = '\0';
}
else {
this->data = new char[strlen(str.data) + 1];
strcpy(this->data, str.data);
this->length = strlen(str.data);
}
}
//析构函数
~String()
{
if (this->data != nullptr) {
delete[] this->data;
this->data = nullptr;
}
}
//等号重载运算符
String& operator = (const String& str) {
if (this != &str) {
delete[] data;
data = nullptr;
if (str.data == nullptr) {
this->data = new char[1];
this->data = '\0';
}
else {
this->data = new char[strlen(str.data) + 1];
strcpy(this->data, str.data);
this->length = strlen(str.data);
}
}
return *this;
}
// 重载输出运算符 友元形式
friend ostream& operator<<(ostream& os, const String& str) {
os << str.data<<str.length;
return os;
}
// 重载输入运算符 友元形式
friend istream& operator>>(istream& os, const String& str) {
os >> str.data;
return os;
}
//打印数组
void print() {
for (int i = 0; i < length; i++) {
cout << this->data[i];
}
cout << endl;
}
//获取长度
int getLength() {
return this->length;
}
private:
char* data;
int length;
};
int main()
{
const char* str = "hello";
String str1(str);
cout << "str1: " << str1 << endl;
String str2("world!");
cout << "str2: " << str2 << endl;
String str3(str1);
cout << "str3: " << str3 << endl;
cout << "str3: " << str3.getLength()<< endl;
str3.print();
str3 = str2;
cout << "str3; " << endl;
}