赋值操作符“=”重载
两个同类型的对象之间可以赋值,其含义是用一个对象的状态来改变另一个对象的状态;
C++编译程序会为每一个类定义一个隐式的赋值操作符重载函数,其行为是:逐个对成员进行赋值操作,但是它不能满足对象间赋值的操作。
赋值操作符只能作为非静态的成员函数来重载,并且,它不能被派生类继承;
所谓的赋值构造函数,就是重载=这个操作,是得它的操作数为类时,也能得到我们想要的结果。
class Employee
{ public: //默认构造函数 Employee():name("noname"),ID(counter){counter++;} //接受一个string类参数的构造函数 Employee(const string nm):name(nm),ID(counter){counter++;} //复制构造函数 Employee(Employee &other):name(other.name),ID(other.ID){} //赋值构造函数 Employee& operator=(const Employee &rhs) { name = rhs.name; //返回this指针意味着可以连续赋值 return *this; } private: string name; int ID; static int counter; };
其中的Employee& operator=(const Employee &rhs)便是对“=”的重载。其中operator=表明重载的是“=”操作符。形参必须与操作符对应的操作数一致:按理来说,应该是“=”左右两边的类型都有,但这里隐式的包含了*this指针,指向了“=”的做操作数,所以只有一个形参。函数体的具体内容很明显,就是用一个对象的数据成员给另一个对象的数据成员复制。返回this指针意味着我们可以进行a=b=c这样连续赋值的操作。 |
|
来自: 哈飞扬 > 《C 中操作符重载》