首先要知道,运算符重载只是一种语法上的方便,实质上还是一种函数的调用方式。认清这一点,运算符重载就是纸老虎了。既然是函数调用,那么它遵循函数的一般语法,不过他的函数名是operator@,@代表要重载的运算符,而参数个数取决于该运算符是一元运算符还是二元运算符。
实际使用过程中,运算符重载函数最常见的声明方式是成员函数和友元函数。
首先我们声明一个拥有两个int类型成员变量的类Complex2:
头文件:
class Complex2
{
public:
Complex2(void);
Complex2(int a,int b);
~Complex2(void);
public :
int b;
int a;
};
源文件:
#include "Complex2.h"
Complex2::Complex2(void)
{
}
Complex2::Complex2(int a,int b):a(a),b(b)
{
}
Complex2::~Complex2(void)
{
}
然后分别使用成员函数和友元函数来实现+、-运算符的重载
1.成员函数:
//声明
Complex2 operator+(const Complex2 &com);
//实现
Complex2 Complex2::operator+(const Complex2& com)
{
Complex2 com2;
com2.a = this->a+com.a;
com2.b = this->b+com.b;
return com2;
}
main函数:
int _tmain(int argc, _TCHAR* argv[])
{
Complex2 com1(3,4);
Complex2 com2(3,3);
Complex2 com3 = com2+com1;
cout<<com3.a<<endl;
cout<<com3.b<<endl;
cin.get();
return 0;
}
结果输出:6 7
2.友元函数
友元函数与成员函数声明的不同在于参数个数和参数顺序
//声明
friend Complex2 operator-(Complex2 com1,Complex2 com2);
//实现
Complex2 operator-(Complex2 com1,Complex2 com2)
{
Complex2 com3;
com3.a = com1.a-com2.a;
com3.b = com1.b-com2.b;
return com3;
}
main函数
int _tmain(int argc, _TCHAR* argv[])
{
Complex2 com1(7,9);
Complex2 com2(3,3);
Complex2 com4 = com1-com2;
cout<<com4.a<<endl;
cout<<com4.b<<endl;
cin.get();
return 0;
}
输出: 4,6
注意:友元函数中不可以使用this,因此函数声明有两个参数,而且第一个参数必须是运算符前的变量,第二个参数是运算符后的变量(针对于二元运算符)。