已知类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)
{
cout<<"普通构造函数"<<endl;
if(str==NULL) //如果str为空,存空字符串
{
m_String=new char[1]; //分配一个字节
*m_String='\0'; //将之赋值为字符串结束符
}
else
{
m_String=new char[strlen(str)+1]; //分配空间容纳str内容
strcpy(m_String,str); //赋值str到私有成员
}
}
String::String(const String &other)
{
cout<<"复制构造函数"<<endl;
m_String=new char[strlen(other.m_String)+1];
strcpy(m_String,other.m_String);
}
String::~String(void)
{
cout<<"析构函数"<<endl;
if(m_String!=NULL) //如果m_String 不为NULL,释放堆内存
{
delete [] m_String; //释放后置为NULL
m_String=NULL;
}
}
String & String::operator =(const String &other)
{
cout<<"赋值函数"<<endl;
if(this==&other) //如果对象与other是同一个对象
{
return *this; //直接返回本身
}
delete [] m_String;
m_String=new char[strlen(other.m_String)+1];
strcpy(m_String,other.m_String);
return *this;
}
int main()
{
String a("hello"); //调用普通构造函数
String b("word"); //调用普通构造函数
String c(a); //调用复制构造函数
c=b; //调用赋值函数
return 0;
}
网友评论