赋值构造(赋值运算符)
当一类对象给另一个类对象赋值时,就会调用赋值构造
void opeator = (类&)
{
}
什么时会调用:对象 = 对象;
编译器会生成一个缺省的赋值构造,它负责把一个对象的内存拷贝给另一个对象。
什么情况需要实现赋值构造:
当需要深拷贝时,需要自己动手实现赋值构造,也就是拷贝构造与赋值构造需要同时实现。
编译器会自动生成四个成员函数:构造、析构、赋值构造、拷贝构造。
#include <iostream>
#include <cstring>
using namespace std;
class User
{
char* name;
char pass[7];
public:
User(const char* name,const char* pass)
{
this->name = new char[strlen(name)+1];
strcpy(this->name,name);
strcpy(this->pass,pass);
}
void show(void)
{
cout<<name <<" " <<pass <<endl;
}
~User(void)
{
cout<<"析构"<<&name <<endl;
delete[] name;
}
User(User& that)
{
name = new char[strlen(that.name)];
strcpy(name,that.name);
strcpy(pass,that.pass);
cout << "我是拷贝构造" << endl;
}
User& operator = (const User& that)
{
cout<< this <<" "<< &that << endl;
if(this != &that)
{
cout<<"我是赋值构造"<<endl;
// 释放旧空间
delete[] name;
// 申请新空间
name = new char[strlen(that.name)+1];
// 拷贝内容
strcpy(name,that.name);
strcpy(pass,that.pass);
/*
User temp(that);
swap(name,temp.name);
*/
}
return *this;
}
};
int main()
{
User u1("a","aa");
User u2("bbbb","bb");
User u3("ccc","cc");
//赋值构造
u1 = u1;
//u2 = u1 = u3;
u1.show();
u2.show();
u3.show();
}
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!