赋值运算符函
#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
String(const char *s=nullptr);//自定义构造函数
String(const String &s1);//拷贝构造哈数
String &operator=(const String &s);//赋值构造函数
void print();
private:
char *data;
};
String::String(const char *s)
{
if(s==NULL)
{
data=new char[1];
data[0]='\0';
}
else
{
data=new char[strlen(s)+1];
strcpy(data,s);
}
}
String::String(const String &s1)
{
data=new char[strlen(s1.data)+1];
strcpy(data,s1.data);
//cout<<" copy."<<endl;
}
String &String::operator=(const String &s)
{
if(&s==this)//防止自己赋值
return *this;
delete []data;
data=new char[strlen(s.data)+1];
strcpy(data,s.data);
//cout<<" operator=."<<endl;
}
void String::print()
{
cout<<data<<endl;
}
int main()
{
String s("hello word.");//自定义构造函数
String s2=s;//拷贝构造函数
String s3(s2);//s3需要用s2初始化,调用拷贝构造函数
s2=s3;//s2,s3已存在。调用赋值构造函数 ;当一个类的对象向该类的另一个对象赋值时,就会用到该类的赋值函数。首先该对象要存在
s2.print();
s3.print();
return 0;
}