正如类(class)控制对象如何初始化,类同时也控制该类的对象是如何赋值:
Sales_data trans,accum;
trans=accum;//这里使用了类Sales_data的copy-assignment 操作符
这里的copy-assignment操作符和copy结构函数(copy constructor)一样,当没有主动创建的时候,编译器就会自动创建copy-assignment 操作符。
重载符(overloaded operator)
重载符(overloaded operator)是一种函数,该函数名字由关键字operator 后跟着所需定义的符号,因此赋值操作符函数的名字就是“operator=”,该函数和其他一般的函数一样,有返回值和参数表。其中重载操作符中的参数代表这个操作符(operator)的操作数(operands)。在一些类中重载符函数是必须是要显示申明和定义的。当一个类中存在一个操作符函数的时候,左操作数被连接到 this,右操作数则为参数表中显示参数。
例如:
class Foo{
public:
Foo& operator=(const Foo&);
//...
};
值得注意的是赋值操作符(Assignment operator)普遍是需要返回一个左操作数的引用(reference)。
定义Copy-Assignment Operator
如何定义Copy-assignment operator?我想给一个例子的话,就能很轻松的知道如何定义
Sales_data& Sales_data::operator=(const Sales_data &rhs)
{
bookNo=rhs.bookNo; //调用string::operator=
units_sold=rhs.units_sold; //使用内嵌的int赋值
revenu=rhs.revenue; //使用内嵌的double赋值
return *this; //返回一个对象(右操作数)的引用
}
可知类中赋值操作符的定义是由内嵌或者其他类型的赋值操作完成的。
private复制控制(copy-control)
要禁止一个类的对象相互复制,赋值,可以在类设计将复制结构函数和复制赋值操作符函数放到私有成员中(private:下)
class privateCopy{
privateCopy(const privateCopy& );
privateCopy &operator=(const privateCopy& );
public:
privateCopy()=default;
~privateCopy();
}