C++赋值运算符重载
一、为什么要重载赋值运算符
在前面的内容中讲解 拷贝构造函数调用的时机 时说明了初始化和赋值的区别:在定义的同时进行赋值叫做初始化
,定义完成以后再赋值(不管在定义的时候有没有赋值)就叫做赋值
。初始化只能有一次,赋值可以有多次。
当以拷贝的方式初始化一个对象时,会调用拷贝构造函数;当给一个对象赋值时,会调用重载过的赋值运算符。即使没有显式的重载赋值运算符,编译器也会以默认地方式重载它。默认重载的赋值运算符功能很简单,就是将原有对象的所有成员变量一一赋值给新对象,这和默认拷贝构造函数的类似。看下面的代码:
#include <iostream>
#include<string>
using namespace std;
class People
{
public:
People(string name = "", int* ptr =NULL); // 普通构造函数,
People(const People &peo); //显示声明拷贝构造函数
~People();
void Display();
void SetAge(int age);
private:
string m_name;
int* mp_age;
};
People::People(string name, int* ptr)
{
m_name = name;
mp_age = ptr;
}
People::People(const People &p