1.运算符重载的格式为<类型名> operator <运算符>(<参数表>)
2 不能重载的运算符有:
1.三目元运算符,即?和:
2域运算符::
3类属关系运算符.
4sizeof运算符
5指针运算符*
使用运算符重载可以进行一些恶作剧,比如说下列代码
#include <iostream>
using namespace std;
struct foolNumber
{
int value;
};
int operator+(foolNumber addend1,foolNumber addend2)
{
return (addend1.value - addend2.value);
}
int operator-(foolNumber minuend,foolNumber subtrahend)
{
return (minuend.value * subtrahend.value);
}
int operator*(foolNumber factor1,foolNumber factor2)
{
return (factor1.value / factor2.value);
}
int operator/(foolNumber dividend,foolNumber divisor)
{
return (dividend + divisor);
}
int main()
{
foolNumber a;
foolNumber b;
a.value = 10;
b.value = 5;
cout << "a = " << a.value << endl;
cout << "b = " << b.value << endl;
cout <<"The value of a,b will not change after there.\n";
cout <<"a + b = " << a+b << endl;
cout <<"a - b = " << a-b << endl;
cout <<"a * b = " << a*b << endl;
cout << "a / b = " << a/b << endl;
return 0;
}
这段代码重载了+-*/这四个运算符,并且使用+运算符作减法,*运算符做除法等。这就是运算符重载的一个特色,赋予运算符另外的功能(这段代码中就是愚人)
还有一点需要注意,运算符重载时至少有一个参数,或者返回类型为非基本类型(比如说类或者自定义的结构、联合等)。运算符重载实际上就是用运算符来调用一个函数,但是容易造成难以理解代码的后果发生(如果不完全清楚各个成员或者变量时什么类型的话,这样不知道究竟有没有重载运算符)。虽然在“Hello World"中就已经渗透了运算符重载,但是运算符重载还是一个高深的学问。比如说,cout >> "Hello World" >> endl,为什么可以连续重载2次呢?cout是一个类,然后又重载了两次>>运算符,这就有些高深了。