对运算符重载的函数有两种处理方式:(1)把运算符重载的函数作为类的成员函数:(2)运算符重载的函数不是类的成员函数(可以是一个普通函数),在类中把它声明为友元函数。下面对这种方式的特点作一些分析。
有的读者可能对运算符重载的函数提出这样的问题:"+"是双目运算符,为什么重载函数中只有一个参数呢?实际上,运算符重载函数应当有两个参数,但是,由于重载函数是Complex类中的成员函数,因此有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。
在上一篇文章中已说明,在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为
c1.operator+(c2)
即通过对象c1调用运算符重载函数"operator+",并以表达式中第2个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex(c1.real+c2.real,c1.imag+c2.imag))。
运算符重载函数除了可以作为类的成员函数外,还可以是非成员函数。在有关的类中把它声明为友元函数。这就是本节开头提到的第(2)种方式,即友元运算符重载函数。
编写程序: