過載運算子
我對過載運算子的理解就是:將以前所學的運算子給公升級化了,使得使用者自定義的資料以一種更簡潔的方式工作,(舉個例子:以前的大於號小於號只能比較數字的大小,而過載後的運算子的功能不僅僅可以比較數字的大小,它還可以對年月日進行比較)
過載運算子的過程中對運算子的過載也是有限制的
不可以過載的運算子:. :: .* ?: sizeof
可以過載的運算子:
() new delete new delete
過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:
1.不改變運算子的優先順序
2.不改變運算子的結合性
3.不改變運算子所需要的運算元
4.不能建立新的運算子
運算子函式可以過載為成員函式或友元函式
一元運算子
過載為成員函式,解釋為:
object . operator op ()
運算元由物件object通過this指標隱含傳遞
過載為友元函式,解釋為:
operator op (object)
(運算元由參數列的引數object提供)
二元運算子
objectl
op objectr
過載為成員函式,解釋為:
objectl . operator op ( objectr )
左運算元由objectl通過this指標傳遞,右運算元由引數objectr傳遞
過載為友元函式,解釋為:
operator op ( objectl, objectr )
左右運算元都由引數傳遞
用成員函式過載運算子
成員運算子函式的原型在類的內部宣告格式如下:
class x
對雙目運算子而言,成員運算子函式的形參表中僅有乙個引數,它作為運算子的右運算元,此時當前物件作為運算子的左運算元,它通過this指標隱含地傳遞給函式的。
#include class complex
complex(double r,double i)
complex operator + (complex &c2); //過載運算子"+"
void display( );
private:
double real;
double imag;
};
一般而言,如果在類x中採用成員函式過載雙目運算子@,成員運算子函式operator@ 所需的乙個運算元由物件aa通過this指標隱含地傳遞,它的另乙個運算元bb在參數列中顯示,aa和bb是類x的兩個物件,則以下兩種函式呼叫方法是等價的:
aa @ bb;
// 隱式呼叫
aa.operator @(bb);
// 顯式呼叫
對單目運算子而言,成員運算子函式的參數列中沒有引數,
此時當前物件作為運算子的乙個運算元。
一般而言,採用成員函式過載單目運算子時,以下兩種方法是等價的:
@aa;
// 隱式呼叫
aa.operator@();
// 顯式呼叫
成員運算子函式operator @所需的乙個運算元由物件aa通過this
指標隱含地傳遞。因此
,在它的參數列中沒有引數。
用友元函式過載
友元函式過載運算子常用於運算子的左右運算元型別不同的情況
1.在第乙個引數需要隱式轉換的情形下,使用友元函式過載運算子是正確的選擇class complex
z . operator + ( 27 )z = 27 + z ; //27. operator + ( z )…...complex ( int a , int b )
complex operator + ( complex ) ;
…...
} ;
int f ( )
}
2.友元函式沒有 this 指標,所需運算元都必須在參數列顯式宣告,很容易實現型別的隱式轉換
3.c++中不能用友元函式過載的運算子有 = () [] ->
成員運算子函式比友元運算子函式少帶乙個引數(後置的++、--需要增加乙個形參)。
雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,但當運算元型別不相同時,必須使用友元函式.
數學類中常用的幾個運算子過載的特點和應用
設 a aobject ;
運算子 ++和 - - 有兩種方式:
前置方式:
(++aobject --aobject)
成員函式過載
a :: a operator++ () ;
解釋為: aobject . operator ++( ) ;
友元函式過載 friend a operator++ (a &) ;
解釋為: operator ++( aobject ) ;
後置方式:(aobject++ aobject --)
成員函式過載
a :: a
operator++ (int) ;//(int)偽引數
解釋為: aobject . operator ++( 0 ) ;
友元函式
過載:friend a operator++ (a &, int) ;
解釋為: operator++(aobject, 0)
過載賦值運算子
1.賦值運算子過載用於物件資料的複製
2. operator= 必須過載為成員函式
過載函式原型為:
類名 & 類名 :: operator= ( 類名 ) ;
過載流插入和流提取運算子
1.istream 和 ostream 是 c++ 的預定義流類
2.cin 是 istream 的物件,cout是ostream的物件
3.運算子 << 由ostream過載為插入操作,用於輸出基本型別資料
4.運算子 >> 由 istream 過載為提取操作,用於輸入基本型別資料
5.用友元函式過載 << 和 >> ,輸出和輸入使用者自定義的資料型別
過載輸出運算子「<<」(只能被過載成友元函式,不能過載成成員函式)
定義輸出運算子「<<」過載函式的一般格式如下
:
ostream& operator<<(ostream& out,class_name& obj)
個人心得
使用過載後的運算子,對我們寫**幫助是非常大的,特別是對寫類和物件這一類的**時,對於查詢某一時間段的交易記錄是非常有幫助的,比如在寫atm中的時間類時,就非常地有幫助。原因是運算子過載之後,可以直接對時間進行比較,以前運算子未被過載時,只能簡單地對數字進行比較。運算子過載之後,運算子都相當於公升級了,作用更大了。但是我們應該注意:並不是所有的運算子都可以過載,只有部分運算子可以過載. 在寫過載運算子時還應該注意過載的方式不同,有前置方式和後置方式。我感覺運算子過載這一章挺重要的,所以我們應該好好學習並熟練掌握這一章的內容,最重要的是還要會使用。我們學習不僅僅是為了寫**,而是為了更好地優化**,我們要好好運用所學的知識去優化**。
過載運算子
題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...
過載運算子
include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...
過載運算子
1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...