首先要明白為什麼要過載運算子,其意義何在:
1)我們知道c++的基本資料型別,比如int,都支援 「+ 」 「-」 「 *」 「 /」 操作,但是對於我們自定義的型別(類)的物件,並不支援這些運算子操作,過載運算子就是為了讓我們自定義的型別的物件間也支援這些運算子操作。
2)c++不允許程式設計師自定義新的運算子,所以只能對已有的運算子進行過載。
過載運算子要遵循的一些原則:
1)不支援過載的運算子有5個:成員訪問運算子. 作用域運算子:: 條件運算子?: 成員指標運算子* 預處理符號#
2)過載不能改變運算子運算物件的個數,比如過載+運算,參與運算的物件必須為2個
3)過載不能改變運算子的優先級別
4)過載運算子的函式不能有預設的引數,否則就違背了原則2),等於改變了運算子運算物件的個數
5)過載的運算子必須和類的物件一起使用,其引數至少應該有乙個是類的物件
運算子過載的格式:
運算子過載其實就是函式的過載
函式型別 operator 運算子名稱(形參)
對運算子的過載處理
舉例:1)一元運算子(-負號)過載
class distance
private:
int feet;
int inches;
public:
distance()
feet = 0;
inches = 0;
distance(int f,int in)
feet = f;
inches = in;
distance operator -()
feet = -feet;
inches = -inches;
return distance(feet,inches);
2)二元運算子過載
class box
private:
int length;
int height;
int breadth;
public:
box()
length = 0;
height = 0;
breadth = 0;
box operator + (const box &other)
box box;
box.length = this->length + other.length;
box.height = this->height + other.height;
box.breadth = this->breadth + other.breadth;
return box;
3)下標運算子過載
const int size = 10;
class testarray
private:
int arr[size];
public:
testarray()
for(int i=0;i<10;i++)
arr[i] = i;
int& operator (int i)
if(i>size)
cout<<"索引超出範圍"else
return arr[i];
C 學習筆記之運算子過載
operator 運算子 例1 複數的 運算 檔案1 complex1.h 複數類的定義 ifndef complex1 h define complex1 h class complex endif 檔案2 complex1.cpp 複數類的成員函式定義 include include compl...
C 筆記之 運算子過載
格式 函式型別 operator 運算子 形參表 includeusing namespace std class complex complex double m real,double m imag void show cout istream in,complex c 輸入流的過載 int m...
c 學習筆記 運算子過載
今天在看使用ceres擬合函式 的時候看到了運算子過載,由於c 當時沒學好現在也忘得差不多了,所以打算開始做乙個c 的學習筆記,看到哪寫到哪。今天看到的這段 如下 template bool operator const t const abc,t residual const 操作符過載的格式是 ...