所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋
予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的
函数,也就是”一名多用”。
运算符也可以重载,而在平常操作中对于int…一些类型的数学运算,计算机已经对此进行了重载,而对于自己定义的类型则无法使用数学运算,这时就需要自己对此进行重载操作。
运算符重载的本质是函数重载。
运算符重载的规则:
- 用于类对象的运算符一般必须重载,但有两个例外,运算符”=“和运算
符”&“不 必用户重载。
- 重载不能改变运算符的优先级别。
- 重载不能改变运算符的结合性。
- 重载运算符的函数不能有默认的参数。
- 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有
一 个是类对象(或类对象的引用)。
- 用于类对象的运算符一般必须重载,但有两个例外,运算符”=“和运算
符”&“不 必用户重载。
- 应当使重载运算符的功能类似于该运算符作用于标准类型数据时候时所实现
的功 能。
- 运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非
类 的成员函数也不是友元函数的普通函数
重载运算符其关键字为operator, operator 运算符名称 在一起构成了新的函数名。比如
Complex operator+(const Complex &c2);
我们会说,operator+ 重载了重载了运算符+。此为成员函数的运算符重载
友元重载前置加关键字friend,如下:
friend Complex operator+(const Complex &c1,const Complex &c2);
注:当使用友元重载运算符时并没有拥有this指针;故需要传递多个对象,而且此函数定义为一般函数定义,而使用前置++和后置++的区别是后置++函数需要另带一个参数,此参数不作操作,用做前置++与后置++的区别
下面写一个重载+=运算符的例子:
class Complex
{
public:
Complex(float x=0, float y=0) :_x(x),_y(y){}
void dis()
{
cout<<"("<<_x<<","<<_y<<")"<<endl;
}
Complex& operator+=(const Complex &c)
{
this->_x += c._x; this->_y += c._y;
return * this;
}
//友元函数重载:
//friend Complex& operator+=(const Complex &c, const Complex &c2) ;
private:
float _x;
float _y;
};
void main(){
int a = 10, b = 20,c = 30;
(a += b) += c;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
Complex a1(10,0),b1(20,0), c1(30,0);
}
执行结果: