運算符重載函數既可以做為類成員函數也可以重載為友元函數,但使用定義方法和使用上是由較大差別的。
運算符重載函數作為類成員函數
首先看一個運算符重載函數作為類成員函數的示例代碼:
定義Complex為復數類,重載運算符"+"實現復數的相加。
程序1.1
#include <iostream.h>
using namespace std;
class Complex
{
public:
Complex()
{
real=0;
imag=0;
}
Complex(double r,double i)
{
real=r;
imag=i;
}
Complex operator +(Complex &c2);//聲明重載運算符"+"的函數
void display();
private:
double real;
double imag;
};
Complex Complex::operator+(Complex &c2)//定義重載運算符"+"的函數
{
Complex c3;
c3.real=real+c2.real;
c3.imag=imag+c2.imag;
return c3;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"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;
}
程序運行界面:
我們單獨拿出運算符成員函數體來分析:
Complex Complex::operator+(Complex &c2)//定義重載運算符"+"的函數
{
Complex c3;
c3.real=real+c2.real;
c3.imag=imag+c2.imag;
return c3;
}
這是重載"+"的成員函數,實現了兩個類中的成員變量的值相加,並賦給第三個變量的功能。
但是,函數只有一個形參,那麼另外一個進行加操作的類是誰呢?
實際上語句:c3=c1+c2;被解釋為c3=c1.operator+(c2);
也就是說,c1類調用了它的成員函數operator+();c2作為該成員函數的實參。
當兩個Complex類執行"+"運算時,“+”左面的類調用成員函數operator+(),並將c2作為函數的實參進行操作。
相關閱讀:
C++中的函數多態性應用&虛函數的靈活應用 http://www.linuxidc.com/Linux/2012-05/59796.htm
C++ 虛函數與純虛函數 http://www.linuxidc.com/Linux/2013-04/83406.htm
C++中虛函數工作原理和(虛)繼承類的內存占用大小計算 http://www.linuxidc.com/Linux/2012-10/72975.htm
C++繼承:同名隱藏、覆蓋,虛函數 http://www.linuxidc.com/Linux/2012-06/62557.htm
C++中的函數多態性應用&虛函數的靈活應用 http://www.linuxidc.com/Linux/2012-05/59796.htm
C++中基類的構造函數調用虛函數的問題及ATL_NO_VTBL宏 http://www.linuxidc.com/Linux/2010-12/30485.htm
繼續閱讀本文的精彩內容請看第2頁: http://www.linuxidc.com/Linux/2013-09/90667p2.htm