编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:

,已知类String的原型为:
class String
{
public:
String(const char *str =NULL); //普通构造函数
String(const String&s); //拷贝构造函数
~String(); //析构函数
String & operator =(const String &s); //赋值函数
private:
char *m_data; //用于保存字符串
};

//普通构造函数

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; //返回本对象的引用

}
温馨提示:答案为网友推荐,仅供参考
第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;
//返回本对象的引用
}