注意:
#include string类
#include<string.h> 字符串和内存的一系列函数
#pragma once
/*
1.数据成员(动态申请char类型的内存)
2.四大默认成员函数
*/
class String
{
public:
String(const char *str = nullptr);//构造字符串时:传入""
String(const String& ref);//拷贝构造函数
String& operator=(const String& other);//赋值函数
~String();
public:
char& operator[](int index);//重载[]运算符
private:
char* pData;//指向堆区内存(堆区内存存放字符串)
};
#include "String.h"
#include <string.h>
String::String(const char *str)
{
//1.str如果为空
if (nullptr == str)
{
//申请1个char类型的内存,并且赋值为'\0'
pData = new char('\0');
}
else
{
//1.求str指向的字符串长度
int length = strlen(str);
//2.申请length+1个char类型的内存
pData = new char[length + 1];
//3.将str指向的字符串拷贝到pData指向的内存中
strcpy(pData, str);
}
}
String::String(const String& ref)
{
//1.求ref指向的字符串的长度
int length = strlen(ref.pData);
//2.申请length+1的内存
pData = new char[length + 1];
//3.将ref指向的字符串拷贝pData指向的内存中
strcpy(pData, ref.pData);
}
String& String::operator=(const String& other)
{
//1.考虑other是否是自身
if (pData == other.pData)
{
return *this;//返回自身
}
//1.先释放原先的内存
delete pData;
//2.求other指向的字符串的长度
int length = strlen(other.pData);
//3.申请length+1的内存
pData = new char[length + 1];
//4.将other指向的字符串拷贝pData指向的内存中
strcpy(pData, other.pData);
return *this;
}
//析构函数
String::~String()
{
delete pData;
pData = nullptr;
}
char& String::operator[](int index)
{
//返回下标对应的字符
return pData[index];
}