歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++運算符重載函數作為類成員函數和友元函數

運算符重載函數既可以做為類成員函數也可以重載為友元函數,但使用定義方法和使用上是由較大差別的。

運算符重載函數作為類成員函數

首先看一個運算符重載函數作為類成員函數的示例代碼:

定義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

Copyright © Linux教程網 All Rights Reserved