C 操作符過載

2021-07-17 03:04:28 字數 2663 閱讀 7297

c++操作符過載

//-------------------------------------

系統預定義的操作符主要是針對基本資料型別

例如乙個整型,可以進行+,-,*,/,%等操作,那麼考慮一下類的例項(物件)之間操作符又該如何呢?

雖然可以通過函式來完成相應的功能,卻沒有操作符來的更人性化(就像生活中運用的加、減、乘、除一樣),操作符本質上也是函式的一種,通過操作符的過載可以讓操作變得容易理解

操作符過載關鍵字:operator

//'+'操作符過載,普通函式的過載

#include

using namespace std;

class point

//-------------

void print() const

friend point operator+(const point& a, const point& b);//不是成員函式,並沒有與物件**

//    friend point add(const point& a, const point& b); //直接運用函式來達成目標

};point operator+(const point& a, const point& b)

int main()

結果:3, 5

//-----------------------------------------

成員操作符

//------------------------------------

//'+'操作符過載,成員函式的過載

#include

using namespace std;

class point

//-------------

void print() const

point operator+(const point& b);//成員函式,與物件**

};point point::operator+(const point& b)

int main()

結果相同:

3, 5

成員操作符與普通操作符不同的是,成員操作符宣告和定義中省略了第乙個引數,因為成員函式總是與物件**使用的,被**的物件就是第一引數,所以普通操作符過載中operator+前面要加關鍵字friend修飾,為了能訪問point中的私有資料成員

//-----------------------------------------

值返回與值引用

//-----------------------------------------

為什麼'+'過載函式設計時,引數是引用呢?而有時函式引數是值呢?

為什麼'+'過載函式設計時,返回的是point類的值,而不是類的物件的引用呢?

在設計函式時,引數若為類型別,則一般都用引用型;若為內部資料型別,則不用引型。point的"+"操作是兩個point物件相加,相加的結果是另乙個point值,與兩個引數無關,求和過程也不影響兩個引數的值,因此用const的引用

//-----------------------------------------

增量操作符過載

//-----------------------------------------

前增量操作符返回的是左值,返回的是同乙個變數,而後增量操作符返回的是右值,是臨時變數,計算工作結束後便會消失,它們之間的過載有所區別

物件的前增量過載,引數為物件的引用

x& operator++(x& a);//前增量操作符

++a;//等價於operator++(a);

//-----------------------

x operator++(x& a, int b);//後增量操作符

a++;//等價於operator++(a,1);

//--------------------------

例如://time類的operator++應用

#include

#include

using namespace std;

class time

friend time& operator++(time& a);

friend time operator++(time& a, int);

friend ostream& operator<<(ostream& o, const time& t);

}; time& operator++(time& a)

time operator++(time& a, int)

ostream& operator<<(ostream& o, const time& t)

int main()

結果:11:59:58

12:00:00

//------------------------------------

性質:1.拒絕創新

不能建立新的操作符。即除了預定義的運算子之外,不能進行如@、****這些c++編譯器無法識別的奇怪的符號

2.過載限制

c++不能進行"::"、"."、".*"、"?:"、sizeof等操作符的過載

3.過載後的優先順序和結合性不變

4.過載後的操作個數不變

5.專門處理物件

操作符的過載只針對自定義型別,如類的物件

6.不能對操作符重定義

.......

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 不能重新定義內建型別的操作...