重载运算符不会改变运算符的优先级,也无法改变运算符的运算对象数。
重载某个类的某个运算符就是写一个函数定义这个类中的这个运算符。声明函数:qxz operator + (qxz b);
。这个函数可以是全局的,也可以是成员函数。如果是全局的,那么参数从左到右应该和运算符的运算对象相同;如果是成员函数,系统默认最左边的运算对象为第一个参数this
,因此形参表里的参数要少一个。由于外部需要调用重载了的运算符,因此这个成员函数必须在public
内。如果重载运算符不改变参数、不改变成员,那么参数和函数都应当声明为const
。由于重载的运算符经常要访问类的私有成员,因此一般会把这个函数设为类的友元函数。
赋值运算符。任何类的对象本身就可以通过=
赋值,这是因为编译器为每个类都生成了一个默认的等号重载函数。因此我们讨论的赋值运算符的重载是一种新的重载方式。C++要求=
的重载必须是成员函数。由于C++中赋值是个运算,这个运算本身是有返回值的,因此我们在函数中一般把操作作用在*this
上,然后返回*this
。因此函数的返回值是这个类的引用类型。声明:qxz &operator = (const qxz &b){ return *this; }
。