#include <iostream>
#include<cstring>
#include<string>
using namespace std;
class zuo
{
private:
int len;
char *arr;
public:
zuo(){}
friend zuo operator+(zuo& zu,zuo& zo);
zuo(int& slen,char *ar)
{
len=slen;
cout<<"len="<<len<<endl;
arr=new char[len];
cout<<ar<<endl;
int i=0;
while(i<len)
{
*(arr+i)=*(ar+i);
i++;
}
cout<<"本地arr="<<arr<<endl;
cout<<"构造函数创造成功"<<endl;
}
~zuo()//析构函数回收数据
{
cout<<"回收成功"<<endl;
delete arr;
arr=nullptr;
}
zuo(zuo& s)//拷贝构造函数s.operator(s1),深层拷贝
{
len=s.len;
cout<<"len="<<len<<endl;
arr=new char[s.len];
cout<<s.arr<<endl;
int i=0;
while(i<len)
{
*(arr+i)=*(s.arr+i);
i++;
}
cout<<"本地拷贝ye1.arr="<<arr<<endl;
}
// zuo operator=(zuo& s)//深层拷贝赋值
// {
// len=s.len;
// cout<<"len="<<len<<endl;
// arr=new char[s.len];
// cout<<s.arr<<endl;
// int i=0;
// while(i<len)
// {
// *(arr+i)=*(s.arr+i);
// i++;
// }
// cout<<"本地拷贝赋值arr="<<arr<<endl;
// return *this;
// }
void evaluation()
{
arr=nullptr;
len=0;
}
void size()
{
int count=0;
while (*arr++) {
count++;
}
cout<<"len大小="<<count<<endl;
}
void empty()
{
if(this->arr==nullptr)
{
cout<<"此为空"<<endl;
}
else
cout<<"此不为空"<<endl;
}
};
zuo operator+(zuo& zu,zuo& zo)
{
zuo uo;
delete []uo.arr;//回收当前空间
uo.arr=nullptr;
uo.len=zu.len+zo.len;//重新赋值len
cout<<"本地拷贝赋值ye="<<zo.arr<<endl;
cout<<"本地拷贝赋值ye1="<<zu.arr<<endl;
cout<<"len="<<uo.len<<endl;
uo.arr=new char[uo.len];
strcpy(uo.arr,zu.arr);
cout<<"本地拷贝赋值arr="<<uo.arr<<endl;
strcat(uo.arr,zo.arr);
cout<<"本地拷贝赋值arr="<<uo.arr<<endl;
return uo;
}
int main()
{
char brr[]="hello";
char crr[]="qiekenao";
int clen=strlen(crr)+1;
int blen=strlen(brr)+1;
cout<<"clen="<<clen<<'\t'<<"blen="<<blen<<endl;
zuo ye(blen,brr),ye1(clen,crr),ye4;
zuo ye3(ye1);//构造函数创造时必须初始化ye3.ye
ye4.evaluation();//将无参对象指向空
ye3=ye;//ye1.operator=(ye1)
ye3.size();//len数值
ye4.empty();
ye3=ye1+ye;
cout << "Hello World!"<<endl;
return 0;
}