//传统写法
#include<iostream>
#include<cstring>
using namespace std;
class String
{
public:
String(const char* str)//构造
:_str(new char[strlen(str)+1])
{
cout<<"构造"<<endl;
strcpy(_str,str);
}
String(const String& s)//拷贝构造
:_str(new char[strlen(s._str)+1])
{
cout<<"拷贝构造"<<endl;
strcpy(_str,s._str);
}
String& operator=(const String& s)//赋值操作符重载
{
if (this!=&s)
{
cout<<"赋值运算重载---传统写法"<<endl;
char* tmp=new char[strlen(s._str)+1];
strcpy(tmp,s._str);
delete[] _str;
_str=tmp;
}
return *this;
}
~String()//析构
{
if (this!=NULL)
{
cout<<"析构"<<endl;
delete[] _str;
_str=NULL;
}
}
void Printf()
{
cout<<_str<<endl;
}
private:
char* _str;
};
int main()
{
String s1("aaaaa");
s1.Printf();
String s2("bbbbb");
s2.Printf();
String s3(s1);
s3.Printf();
s2=s3;
s2.Printf();
return 0;
}
//现代写法
#include<iostream>
#include<cstring>
using namespace std;
class String
{
public:
String(const char* str)//构造
:_str(new char[strlen(str)+1])
{
cout<<"构造"<<endl;
strcpy(_str,str);
}
String(const String& s)//拷贝构造
:_str(new char[strlen(s._str)+1])
{
cout<<"拷贝构造"<<endl;
strcpy(_str,s._str);
}
String& operator=(String s)//赋值操作符重载
{
cout<<"赋值运算符重载--现代写法"<<endl;
std::swap(_str,s._str);
return *this;
}
~String()//析构
{
if (this!=NULL)
{
cout<<"析构"<<endl;
delete[] _str;
_str=NULL;
}
}
void Printf()
{
cout<<_str<<endl;
}
private:
char* _str;
};
int main()
{
String s1("aaaaa");
s1.Printf();
String s2("bbbbb");
s2.Printf();
String s3(s1);
s3.Printf();
s2=s3;
s2.Printf();
return 0;
}
string传统/现代写法
最新推荐文章于 2023-05-27 08:09:46 发布