Skip to content

fix: sizeof(other.m_data) -> strlen(other.m_data) #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 62 additions & 65 deletions back-end.md
Original file line number Diff line number Diff line change
Expand Up @@ -499,71 +499,68 @@ Const,volatile修饰指针的含义,
写string类的构造,析构,拷贝函数

String 类的原型如下
class String
{
public:
String(const char *str=NULL); //构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String& operator=(const String &other); //等号操作符重载
ShowString();

private:
char *m_data; //指针
};

String::~String()
{
delete [] m_data; //析构函数,释放地址空间
}
String::String(const char *str)
{
if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';
{
m_data=new char[1];
*m_data='\0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}

String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other)
{
if (this==&other)//当地址相同时,直接返回;
return *this;

delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this;
}

String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
cout<<this->m_data<<endl;
}

main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();

}
```C++
class String {
public:
String(const char *str = NULL); //构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String &operator=(const String &other); //等号操作符重载
void ShowString();

private:
char *m_data; //指针
};

String::~String() {
delete[] m_data; //析构函数,释放地址空间
}

String::String(const char *str) {
if (str == NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';
{
m_data = new char[1];
*m_data = '\0';
} else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
}
}

String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
}

String &String::operator=(const String &other) {
if (this == &other)//当地址相同时,直接返回;
return *this;

delete[] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
return *this;
}

void String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
cout << this->m_data << endl;
}

int main() {
String AD;
char *p = "0123456789";
String B(p);
AD.ShowString();
AD = B;
AD.ShowString();
}
```

1 指针的四要素

Expand Down