c++的資料型別分為基礎資料型別和構造資料型別,基礎資料型別客戶直接完成算數運算,但是比如類這樣的新構造的資料型別是無法通過基本運算子進行算數運算的。此時,便需要過載操作符。
大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。
過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。
box operator+(
const box&
);
如果我們定義上面的函式為類的非成員函式,那麼我們需要為每次操作傳遞兩個引數,如下所示:
box operator+(
const box&
,const box&
);
只對乙個運算元進行操作,這裡包括:
一元減運算子,即負號( - );遞增運算子( ++ )和遞減運算子( – )
遞增運算子包括前置和後置兩種情況,區別如下:
前置++:即++運算子位於運算元的前面,例如:++i;
後置++:即++運算子位於運算元後面,例如:i++;
1、前置++過載時沒有引數,而後置++過載時有引數。不會使用其引數,僅僅是區分用。
2、前置++需要返回引用,因為過載自加運算子後可以返回物件的引用, 以方便在表示式中連續使用。而後置++返回的不是引用,所以不能進行連續使用。返回自增後的值,且返回的是乙個左值
3.後置運算子返回的值是temp,需要注意。因為是後加。返回自增前的值,且返回的是乙個右值
#include
using
namespace std;
class
point
point
(int f,
int i)
void
display()
// 顯示的方法
point operator-(
)// 過載負運算子( - )
point&
operator++(
)//前置
point operator++(
int)
//後置};
intmain()
加( + )、減( - )、乘( * )和除( / )都屬於二元運算子
這裡寫出過載加法運算子的使用方法:
//宣告
point operator+(
const point&b)
//呼叫
point d2(10
,10);
point d3(1
,1);
point d4=d2+d3;
d4.display()
;
流提取運算子 >> 和流插入運算子 << 能夠用於輸入和輸出內建的資料型別。而使用者自定義的資料型別需要過載流提取運算子和流插入運算子來操作物件來實現。
注意:需要把運算子過載函式宣告為類的友元函式,這樣我們就能不用建立物件而直接呼叫函式,可以直接訪問當前類的私有成員。
//宣告輸入/輸出運算子過載
friend istream &
operator
>>
(istream &input, point &d)
friend ostream &
operator
<<
(ostream &output, point &d)
//呼叫
cout <<
"請輸入x,y"
<< endl;
point d4;
cin >> d4;
cout <<
"d4的成員"
<< d4<
結果:
如果使用成員函式來過載需要使用 d4 << cout的方式呼叫,與常見的cout《寫法不一致。
//使用成員函式過載輸出運算子
ostream&
operator
<<
(ostream & os)
//呼叫
d4 << cout;
cout << endl;
相當於定義了乙個函式
//函式呼叫運算子()過載
point operator()
(int a,
int b)
//呼叫
point d5;
d5=d4(2
,3);
cout << d5<< endl;
下標操作符 通常用於訪問陣列元素。過載該運算子用於增強操作 c++ 陣列的功能。比如是否越界等問題的檢查。
#include
using
namespace std;
const
int size =10;
class
safearay
}int
&operator
(int i)
return arr[i];}
};intmain()
C 操作符過載
1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...
C 過載操作符
過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...
c 操作符過載
過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...