運算子過載:運算子過載的方法是定義乙個過載運算子函式。格式如下:
函式型別 operator 運算子名稱(形參表)
int
operator+(
int a,
int b)
例:用運算子過載使兩複數相加
#include
using
namespace std;
class
complex
//定義建構函式
complex
(double r,
double i)
//建構函式過載
complex operator
+(complex&c2)
;//宣告過載運算子+的函式
void
display()
;private
:double real;
//實部
double imag;
//虛部};
complex complex::
operator
+(complex&c2)
//定義過載運算子
void complex::
display()
intmain()
c1+c2解釋為c1.operator+(c2)即以c2為實參呼叫c1的運算子過載函式operator+,進行兩個複數相加。
上面的運算子過載函式可以更加簡練:
complex complex::operator+(complex&c2)不能過載的運算子:. \ * \ :: \ sizeof \ ?:
過載不能改變運算子運算物件的個數
不能改變運算子的優先級別
不能改變運算子的結合性
必須和使用者自定義的自定義型別的物件一起使用,其引數至少有乙個類物件或類物件的引用
成員函式:
complex complex::
operator
+(complex&c2)
//定義過載運算子
為什麼只有乙個引數呢:實際上有兩個引數,由於過載函式是complex類中的成員函式,因此有乙個引數是隱含的,運算子函式是用this指標隱式的訪問類物件的成員
友元函式:
;complex operator
+(complex&c1,complex&c2)
運算子函式不作為成員函式,而是類外的普通的函式,在complex類中宣告它為友元函式。可以看到裡面有兩個引數。
二者區別:
運算子過載函式作為成員函式,它可以通過this指標自由地訪問本類的資料成員,因此可以少寫乙個引數。
作為成員函式,要求第乙個引數是乙個類物件且與運算子型別相同
作為友元函式運算子左側與函式第乙個引數對應,右側與第二個引數對應
**例:**過載運算子》
#include
#include
using
namespace std;
class
string
string
(char
*str)
;friend
bool
operator
>
(string&string1,string&string2)
;//宣告運算子為友元函式
void
display()
;private
:char
* p;
//字元型指標用於指向字串};
string::
string
(char
*str)
void string::
display()
bool
operator
>
(string&string1,string&string2)
//定義運算子過載
intmain()
string物件以字串「hello」作為實參,它的起始位址傳遞給建構函式的形參指標str,建構函式中,p指向hello
指導思想:先搭框架,逐步擴張,由簡到繁,最後完善。邊程式設計,邊除錯,邊擴充;
單目運算子只有乙個操作符,因此函式只有乙個引數。
例:每六十秒進一分鐘
#include
using
namespace std;
class
time
//預設建構函式
time
(int m,
int s)
:minute
(m),
sec(s)
//建構函式過載
time operator++(
);//宣告運算子過載成員函式
void
display()
private
:int minute;
int sec;};
time time::
operator++(
)//定義運算子過載成員函式
return
*this
;//返回當前物件值
}int
main()
return0;
}執行結果:共輸出61行,到35:1
">>"
過載函式形式:istream&operator>>(istream&,自定義類&);
ostream &
operator
>>
(istream&output,complex&c)
只有在輸出complex類物件時才能用過載的運算子,對其他型別的物件無效。
"<<"
過載運算子:ostream&operator<<(ostream&,自定義類&);
用 轉換建構函式 進行不同型別資料的轉換
回顧學習過的建構函式
預設建構函式
complex();
用於初始化的建構函式
complex(double r,double i) ;
用於複製物件的複製建構函式
complex(complex&c);
轉換建構函式:complex(double r)
只能有乙個引數
上面的示例: 只有乙個引數,作用是將double型的引數r轉換成complex類的物件,將r作為複數的實部。型別轉換函式
一般形式:operator 型別名()
在函式名前不能指定函式的型別,函式沒有引數。型別轉換函式只能作為成員函式,因為轉換的主題是本類的物件。不能作為友函式或普通函式。
如果已經宣告了complex類
operator
double()
complex
(double r,
double i)
operator
double()
//定義型別轉換函式
private
:double real;
double imag;};
intmain()
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...