運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。
你可以重定義或過載大部分 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;};
intmain()
當上面的**被編譯和執行時,它會產生下列結果:
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)
intmain()
當上面的**被編譯和執行時,它會產生和上面一樣的結果
下面將進行各種運算子過載例項的**演示,演示幾種基本的運算子過載。
以提取運算子過載<<
為例,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)
intmain()
當上面的**被編譯和執行時,它會產生下列結果:
< point>( 7, 7)注意:過載
<<
時,是類外過載,習慣上人們是使用cin>>
和cout<<
的,得使用友元函式來過載運算子,如果使用成員函式來過載會出現c《另外應該會有人對ostream &operator<<(ostream &out , const point &a)
函式感到疑惑,首先在過載<<
時,返回值型別是ostream&
, 第乙個引數也是ostream&
。也就是說,表示式cout<#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)
; 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)
intmain()
當上面的**被編譯和執行時,它會產生下列結果:
< point>(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 運算子過載存在的意義 在學習運算子過載之前我們在c 中想要實現不同物件之間的運算只能通過介面函式先得到我們想要的數值,然後在進行運算,這篇主要讓大家看一下,後面的文章則開始從最簡單的運算子過載開始講解!例如 實現?類和?類之間的加法運算 對於物件之間加法的運算子過載 這是成員函式的運算子過載實現...
C 運算子過載 簡單易懂
運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。你可以重定義或過載大部分 c 內建的運算子。例如 等,這樣,你就能使用自定義型別的運算子。過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和 其後要過載的運算子符號構成的。與其他函式一樣,過載運...
C 運算子過載 過載特殊運算子
賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...