運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。
你可以重定義或過載大部分 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運算子過載是類內過載時,運算子過載函式作為類的成員函式,以上述**為例a + b 相當於 a 物件呼叫+方法並且傳入引數時 b 物件y: 7
#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()
當上面的**被編譯和執行時,它會產生和上面一樣的結果
下面將進行各種運算子過載例項的**演示,演示幾種基本的運算子過載。
以提取運算子過載<<
為例,cout
是ostream
類的物件。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)1>為區別前置和後置運算子,需要在後置運算子過載函式中加引數「int」,雖然這個型別在此除了以示區別之外並不代表任何實際含義;< point>(8 , 8)
< point>(9 , 9)
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.拷貝建構函式 是建構函式的一種過載,注意其引數一定要用 引用 否則呼...