運算子過載使得使用者自定義的資料以一種更簡潔的方式工作
具體格式
class x
在類外定義成員運算子函式的格式如下:
返回型別 x::operator運算子(形參表)
過載運算子的限制
1:不能過載的算符
. :: .* ?:
sizeof
c++中
不能用友元函式過載的運算子有
=
() [] -
>
2:過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:
不改變運算子的優先順序 不
改變運算子
的結合性
不改變運算子所需要的運算元
不能建立新的運算子
例子:有乙個time類,包含資料成員minute(分)和sec(秒),模擬秒錶,每次走一秒,滿60秒進一分鐘,此時秒又從0開始算。要求輸出分和秒的值。
class time
time(int
m,int
s):minute(m),sec(s)
time
operator++( ); //
宣告前置自增運算子「
++」過載函式
time
operator++(int); //
宣告後置自增運算子「
++」過載函式
private:
intminute;
intsec; };
time
time∷operator
++( ) //
定義前置自增運算子「
++」過載函式
return*this;
//返回當前物件值 }
time
time∷operator
++(int) //
定義後置自增運算子「
++」過載函式
returntemp;
//返回的是自加前的物件 }
注意: 1:
成員運算子函式比友元運算子函式少帶乙個引數(後置的++、--需要增加乙個形參)。
2: 雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,但當運算元型別不相同時,必須使用友元函式。
一元運算子
object
op或
opobject
過載為成員函式,解釋為:
object .
operator op()
運算元由物件
object
通過this
指標隱含傳遞
過載為友元函式,解釋為:
operatorop
(object)
運算元由參數列的引數
object
提供
二元運算子
過載為成員函式,解釋為:
objectl
. operatorop
( objectr)
左運算元由
objectl
通過this
指標傳遞,右運算元由引數
objectr傳遞
過載為友元函式,解釋為:
operatorop
( objectl
, objectr)
左右運算元都由引數傳遞
前置,後置設a
aobject;
運算子
++和
- -
有兩種方式:
前置方式:
++aobject
--aobject
成員函式
過載a:: a operator++ () ;
解釋為:
aobject
. operator ++( ) ;
友元函式
過載frienda operator++ (a &) ;
解釋為: operator ++(
aobject
) ;
後置方式:
aobject
++
aobject--
成員函式
過載a:: a operator++ (int) ;
解釋為:
aobject
. operator ++( 0 ) ;
友元函式
過載:friend a operator++ (a &, int) ;
解釋為:
operator++(
aobject
,0)
過載++--
time
operator++( ); //
宣告前置自增運算子「
++」過載函式
time
operator++(int); //
宣告後置自增運算子「
++」過載函式
【】()運算子使用
運算子用於訪問資料物件的元素
過載格式
型別
類::operator (
型別) ;
()運算子用於函式呼叫
過載格式
型別 類
:: operator() (
參數列) ;
注意:
運算子和()是二元運算子
和()只能用成員函式過載,不能用友元函式過載
過載輸出輸入流
cin是
istream
的物件,
cout
是ostream
的物件
運算子
<<
由ostream
過載為插入操作,用於輸出基本型別資料
運算子
>>
由istream
過載為提取操作,用於輸入基本型別資料
用友元函式過載
<<
和》,輸出和輸入使用者自定義的資料型別
例如:istream&operator>>(istream&in,class_name&obj)
注意:只能被過載成友元函式,不能過載成成員函式
賦值運算子過載用於物件資料的複製
operator=必須過載為成員函式
總結:運算子過載是給以運算子新的定義功能,來更方便的進行計算實現功能。
過載運算子總體可以分為兩類:成員函式過載,友元函式過載
本章總的學習是一元二元運算子過載 關係運算子過載 輸出輸入運算子過載 ++和--運算子過載 賦值運算子過載
()【】運算子過載
過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表
類成員訪問運算子( -> )可以被過載,但它較為麻煩。它被定義用於為乙個類賦予"指標"行為。運算子 -> 必須是乙個成員函式。如果使用了 -> 運算子,返回型別必須是指標或者是類的物件。
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...