第1个回答 2020-02-23
//
String
的析构函数
String::~String(void)
{
delete
[]
m_data;
//
由于m_data
是内部
数据类型
,也可以写成
delete
m_data;
}
//
String
的普通
构造函数
String::String(const
char
*str)
{
if(str==NULL)
{
m_data
=
new
char[1];
//
若能加
NULL
判断则更好
*m_data
=
‘\0’;
}
else
{
int
length
=
strlen(str);
m_data
=
new
char[length+1];
//
若能加
NULL
判断则更好
strcpy(m_data,
str);
}
}
//
拷贝构造函数
String::String(const
String
&other)
{
int
length
=
strlen(other.m_data);
m_data
=
new
char[length+1];
//
若能加
NULL
判断则更好
strcpy(m_data,
other.m_data);
}
//
赋值函数
String
&
String::operate
=(const
String
&other)
{
//
(1)
检查自赋值
if(this
==
&other)
return
*this;
//
(2)
释放原有的
内存
资源
delete
[]
m_data;
//
(3)分配新的内存资源,并复制内容
int
length
=
strlen(other.m_data);
m_data
=
new
char[length+1];
//
若能加
NULL
判断则更好
strcpy(m_data,
other.m_data);
//
(4)返回本对象的引用
return
*this;
}
第2个回答 2019-08-02
//普通构造函数
String::String(const
char
*str)
{
if(str==NULL)
{
m_data
=
new
char[1];
//
对空字符串自动申请存放结束标志'\0'的空
//对m_data加NULL
判断
*m_data
=
'\0';
}
else
{
int
length
=
strlen(str);
m_data
=
new
char[length+1];
//
若能加
NULL
判断则更好
strcpy(m_data,
str);
}
}
//
String的析构函数
String::~String(void)
{
delete
[]
m_data;
//
或delete
m_data;
}
//拷贝构造函数
String::String(const
String
&other)
//
输入参数为const型
{
int
length
=
strlen(other.m_data);
m_data
=
new
char[length+1];
//对m_data加NULL
判断
strcpy(m_data,
other.m_data);
}
//赋值函数
String
&
String::operate
=(const
String
&other)
//
输入参数为const型
{
if(this
==
&other)
//检查自赋值
return
*this;
delete
[]
m_data;
//释放原有的内存资源
int
length
=
strlen(
other.m_data
);
m_data
=
new
char[length+1];
//对m_data加NULL
判断
strcpy(
m_data,
other.m_data
);
return
*this;
//返回本对象的引用
}