C 運算子過載 簡單易懂

2022-09-06 22:57:15 字數 2929 閱讀 6528

運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。

你可以重定義或過載大部分 c++ 內建的運算子。例如 + 、 - 、 * 、 / 、

++、--、>>、《等,這樣,你就能使用自定義型別的運算子。

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和

其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個

返回型別和乙個引數列表。

point operator+(const point &);

運算子過載有兩種方式:一種是類內過載(運算子過載函式作為類的成員函式),另一種是類外過載(運算子過載函式作為類的友元函式)

#include using namespace std;

class point;

point (int x, int y): x(x),y(y) {};

point operator+(const point &a)

int x,y;

};int main()

當上面的**被編譯和執行時,它會產生下列結果:

x : 7

y: 7

運算子過載是類內過載時,運算子過載函式作為類的成員函式,以上述**為例a + b 相當於 a 物件呼叫+方法並且傳入引數時 b 物件

#include using namespace std;

class point;

point (int x, int y): x(x),y(y) {};

friend point operator+(const point &, const point &);

int x,y;

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

int main()

當上面的**被編譯和執行時,它會產生和上面一樣的結果

下面將進行各種運算子過載例項的**演示,演示幾種基本的運算子過載。

以提取運算子過載<<為例,coutostream類的物件。ostream類和cout都是在標頭檔案中宣告的。ostream類將<<過載為成員函式。

下面我們過載<<使用cout輸出a物件

#include using namespace std;

class point;

point (int x, int y): x(x),y(y) {};

friend point operator+(const point &, const point &);

friend ostream &operator<<(ostream &out , const point &a);

private:

int x,y;

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

ostream &operator<<(ostream &out , const point &a)

int main()

當上面的**被編譯和執行時,它會產生下列結果:

< point>( 7, 7)

注意:過載<<時,是類外過載,習慣上人們是使用cin>>cout<<的,得使用友元函式來過載運算子,如果使用成員函式來過載會出現c《另外應該會有人對ostream &operator<<(ostream &out , const point &a)函式感到疑惑,首先在過載<<時,返回值型別是ostream&, 第乙個引數也是ostream&。也就是說,表示式coutclass point;

point (int x, int y): x(x),y(y) {};

friend point operator+(const point &, const point &);

friend ostream &operator<<(ostream &out , const point &a);

point& operator++()

const point operator++(int)

private:

int x,y;

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

ostream &operator<<(ostream &out , const point &a)

int main()當上面的**被編譯和執行時,它會產生下列結果:

(7 , 7)

< point>(8 , 8)

< point>(9 , 9)

1>為區別前置和後置運算子,需要在後置運算子過載函式中加引數「int」,雖然這個型別在此除了以示區別之外並不代表任何實際含義;

2>前置返回的是變數的引用,後置返回的是常量。所以++++c合法,而c++++不合法;

3>為什麼不讓c++++也合法呢?如果要實現c++++合法,必須使後置返回變數或變數的引用。c++是先返回c值再+1,所以不可能返回c,那就只能先建立區域性變數來儲存c的初值,然後再返回區域性變數(區域性變數不允許返回引用),但返回了區域性變數之後,如果再連著進行下一次++運算,參與運算的就是這個區域性變數的值了,所以此時c++++其實等效與c++,也就沒有存在的意義了。

C 運算子過載 通俗易懂

運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。你可以重定義或過載大部分 c 內建的運算子。例如 等,這樣,你就能使用自定義型別的運算子。過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和 其後要過載的運算子符號構成的。與其他函式一樣,過載運...

簡單運算子過載

運算子過載的規則 過載為類成員的運算子函式定義形式 返回型別 operator 運算子 形參 引數個數 原運算元個數 1 後置 除外 例如如果你想實現兩個字串拼接直接用 str1 str2 那麼形參應該只有乙個,並且在呼叫過載函式時傳入的實參應該是str2 經過過載後,temp str1 str2 ...

c 簡單幾種運算子過載

1.建構函式 主要實現物件的初始化,如果我們自己不定義建構函式,那麼系統會自動為我們定義乙個建構函式為我們使用,一旦類的物件建立,那麼系統會自動呼叫建構函式來實現物件的初始化,也就是例項化物件 建構函式沒有返回值,且和類名一致 2.拷貝建構函式 是建構函式的一種過載,注意其引數一定要用 引用 否則呼...