歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++運算符重載函數作為類成員函數和友元函數

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

日期:2017/3/1 9:52:48   编辑:Linux編程

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

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

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

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