#include<iostream>
#include<cstring>
using namespace std;
class Name
{
public:
Name(char*pN="\0");
Name &operator=(Name);
Name operator+(Name);
~Name();
void display();
protected:
char*pName;
int size;
};
Name::Name(char *pN)
{
size=strlen(pN);
pName=new char[size+1];
if(pName!=0) strcpy_s(pName,size+1,pN);
}
Name &Name::operator=(Name Obj)
{
delete [] pName;
size=Obj.size;
pName=new char [size+1];
if(pName!=0) strcpy_s(pName,size+1,Obj.pName);
return *this;
}
Name Name::operator+(Name Obj)
{
Name temp;
temp.size=size+Obj.size;
temp.pName=new char[temp.size+1];
strcpy_s(temp.pName,temp.size+1,pName);
strcat_s(temp.pName,temp.size+1,Obj.pName);
return temp;
}
void Name::display()
{cout<<pName<<endl;}
Name::~Name()
{
pName[0]='\0';
delete[] pName;
pName=NULL;
size=0;
}
int main()
{
Name A("linyouquan"),B("linyoukang"),C;
C=A+B;
C.display();
}
以上是修改前的,以下是修改后的
#include<iostream>
#include<cstring>
using namespace std;
class Name
{
public:
Name(char*pN="\0");
Name(const Name&);
Name &operator=(Name);
Name operator+(Name);
~Name();
void display();
protected:
char*pName;
int size;
};
Name::Name(char *pN)
{
size=strlen(pN);
pName=new char[size+1];
if(pName!=0) strcpy_s(pName,size+1,pN);
}
Name::Name(const Name&Obj)
{
size=Obj.size;
pName=new char[size+1];
strcpy_s(pName,size+1,Obj.pName);
}
Name &Name::operator=(Name Obj)
{
delete [] pName;
size=Obj.size;
pName=new char [size+1];
if(pName!=0) strcpy_s(pName,size+1,Obj.pName);
return *this;
}
Name Name::operator+(Name Obj)
{
Name temp;
temp.size=size+Obj.size;
temp.pName=new char[temp.size+1];
strcpy_s(temp.pName,temp.size+1,pName);
strcat_s(temp.pName,temp.size+1,Obj.pName);
return temp;
}
void Name::display()
{cout<<pName<<endl;}
Name::~Name()
{
pName[0]='\0';
delete[] pName;
pName=NULL;
size=0;
}
int main()
{
Name A("linyouquan"),B("linyoukang"),C;
C=A+B;
C.display();
}
虽然做对了,不过不知道第一次为什么会错?