实际上,C++在设计初就运用了函数的重载,如“+”就可以对整数,浮点数进行运算;“<<”左移运算符可以当作提取运算符使用。下面要介绍的便是运算符的重载。
运算符重载有以下规则:
1、C++不允许用户定义新的运算符,只能对C++已有的运算符进行重载;
2、C++不能重载的运算符只有5个,分别是.(成员运算符)、*(成员指针访问运算符)、::(域运算符)、sizeof(长度运算符)、?:(条件运算符);
3、重载不能够运算符对象(操作数)的个数;
4、重载不能够改变运算符的优先级;
5、重载不能够改变运算符的结合性-->如 赋值运算符"="是右结合性,自右向左,重载后仍为右结合性;
6、重载的运算符不能够有默认的参数,否则就改变了运算符操作对象的个数。
7、重载的运算符必须和用户自定义的类型的对象一起使用,其参数至少有一个是类对象或者是类对象的引用。
以“+”重载复数运算为例: Complex operator +(int a ,Complex c){
return Complex(a+c.real,c.img);
}
8、用于类对象的运算符一般必须重载,但是有两个运算符例外, = & 不必用户重载。
“+”重载为复数运算的实例:
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;img=0;}
Complex(double r,double i){real=r;img=i;}
Complex operator + (Complex &c2); //声明重载运算符“+”的函数
void display();
private:
double real;
double img;
};
Complex Complex :: operator +(Complex &c2) //定义重载运算符"+"的函数
{
Complex c;
c.real = real + c2.real;
c.img = img + c2.img;
return c;
}
void Complex :: display()
{
cout<<"("<<real<<","<<img<<"i)"<<endl;
}
int main()
{
Complex c1(3,4),c2(5,-10),c3;
c3=c1+c2;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
cout<<"c1+c2=";
c3.display();
return 0;
}
总结说明:
重载运算符的函数一般格式如下:
1、函数类型 operator 运算符名称 (形参表){对运算符重载的处理;}
2、函数名是由 operator 和运算符名称组成的。
3、c1.operator+(c2)是c1+c2的解释。
截图如下: