c 中的運算子過載

2021-06-29 06:40:33 字數 1282 閱讀 7808

c++中的符號過載:符號的過載也是過載符合過載函式的解析規則,

為了讓運算子運算元更加人性化。

例如我們抽象乙個類的時候,我們有乙個

person類

classperson;

若我們想使用

==來比較

persona 和

personb,但是標準的『

==』只能用來比較

c++的內建型別,而

person並不是

c++的內建型別。於是我們就需要使用符號過載來使這些操作符能夠用來比較我們自己定義的型別。大多數運算子都能過載,但是以下的運算子並不能過載。

:://作用域解析

. //成員選擇

.* //通過到成員的指標做成員選擇

?://三元運算子

.......

那麼過載的方式有哪些呢?

1.直接在類內部寫過載方法

class person

bool operator== (a a);//定義

};a::bool operator== (a a)

這裡需要注意的是,正常來說,當我們過載等號的時候,想到的是引數有兩個,這樣才能比較,然而寫在類中的運算子過載是沒又有兩個引數的,只有乙個引數。我個人覺得,應該是這樣的,當我在呼叫乙個運算子過載的時候,已經初始化了乙個類,所以不能再新建兩個類,而是使用

this指標獲取當前類的資訊。

2.友元函式

友元函式的作用是讓乙個函式不處於乙個類的作用域之中,且不需要由乙個物件去啟用(

this指標)但是卻能訪問類中的私有變數。所以使用友元函式進行運算子過載應該如下所示:

class person

friend bool operator== (a a,a b);//定義

};bool operator== (a a, a b)

3.使用內聯函式

內聯函式

inline相當於是執行時呼叫,類似與

c中的巨集。使用內聯函式的時候,我們需要注意的一點是,內聯函式不能直接訪問類裡面的私有變數,於是我們需要使用乙個

get方法,才能訪問到類中的私有變數。寫法如下

class person

friend bool operator== (a a,a b);//定義

};inline bool operator== (a a, a b)

C 中運算子過載

運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。比如int x,y 可以為y x y 而 my c1,c2 如果想使得兩個自定義的物件相加,以前只能調 用函式計算它們的和。而現在只要定義了運算子過載就能實現c1 c1 c2.所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的...

C 中運算子過載

運算子過載可以寫在類的內部,也可以寫成全域性函式形式,其中運算子 在過載時必須宣告為類的成員函式 而運算子 sizeof 不能被過載 演算法運算子的過載不會改變運算子原有的優先順序。例子 include include include using namespace std class comple...

C 中的運算子過載(一) 運算子過載的概念

概述 運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。運算子過載 operator overloading 只是一種 語法上的方便 也就是它只是另一種函式呼叫的方式,只是為了方便我們使用,運算子只能運算內建的資料型別,對於自定義的資料型別不能運算,所以我們可以過載...