c 學習運算子過載

2021-09-29 11:48:24 字數 3300 閱讀 5402

運算子過載

1、實驗目的

·學習掌握重定義與類有關的運算子。

·把握過載運算子的時機。

·學習掌握把乙個類物件轉換為另乙個類物件。

·學習掌握過載為成員與友元的區別及其帶引數的情況。

·學習掌握值返回與引用返回的區別及應用時機。

2、實驗內容

(1)生成乙個表示複數的類fs。複數的實部sb和虛部xb作為其資料成員。提供成員函式print()顯示複數(格式:-3+5i或6-2i),過載「+」、「-」為fs類的成員函式,用來計算兩個複數的和、差。

思路導航:

① 定義類,設計建構函式和顯示函式print();

② 過載運算子「+」、「-」為類fs的成員函式。

③ 例項化fs類的2個物件,並利用過載的運算子對其進行計算。

另外,根據上述定義,試將上述的運算子過載成員函式改寫成友元函式。

#include

using namespace std;

class fs ~fs

()void

set(

double r=

0.0,

double i=

0.0)

fs operator +

(fs &b)

; fs operator -

(fs &b)

; fs operator *

(fs &b)

; fs operator /

(fs &b)

; friend ostream & operator<<

(ostream &out,

const fs &b)

;void

out(

void);

private:

double real;

double imag;};

fs fs:

:operator +

(fs &b)

fs fs:

:operator -

(fs &b)

fs fs:

:operator *

(fs &b)

fs fs:

:operator /

(fs &b)

ostream& operator<<

(ostream &out,

const fs &b)

void fs:

:out()

intmain()

將上述的運算子過載成員函式改寫成友元函式

#include

using namespace std;

class fs ~fs

()void

set(

double r=

0.0,

double i=

0.0)

friend fs operator +

(fs &a,fs &b)

; friend fs operator -

(fs &a,fs &b)

; friend fs operator *

(fs &a,fs &b)

; friend fs operator /

(fs &a,fs &b)

; friend ostream & operator<<

(ostream &out,

const fs &b)

;void

out(

void);

private:

double real;

double imag;};

fs operator +

(fs &a,fs &b)

fs operator -

(fs &a,fs &b)

fs operator *

(fs &a,fs &b)

fs operator /

(fs &a,fs &b)

ostream& operator<<

(ostream &out,

const fs &b)

void fs:

:out()

intmain()

(2)

編寫乙個時間類,實現時間的加、減、讀和輸出:

#include

using namespace std;

class time

void

settime()

;void

display()

; time operator +

(time &a)

; time operator -

(time &a)

; friend ostream & operator<<

(ostream &out,

const time &b)

; private:

int hour,minute,second;};

void time:

:settime()

while

(hour<=

0||hour>24)

;dowhile

(minute<

0||minute>=60)

;dowhile

(second<

0||second>=60)

;}void time:

:display()

time time:

:operator +

(time &a)

else s=s+a.second;

if(m+a.minute>=60)

else m=m+a.minute;

if(h+a.hour>24)

else h=h+a.hour;

return

(time

(h,m,s));

}time time:

:operator -

(time &a)

else s=second-a.second;

if(m-a.minute<0)

else m=m-a.minute;

if(h-a.hour<0)

else h=h-a.hour;

return

(time

(h,m,s));

}ostream & operator<<

(ostream &out,

const time &b)

intmain()

C 學習 運算子過載

同函式過載一樣,算數操作符過載能夠帶給我們操作不同資料型別的方法,包括你自己定義的類。我們日常最常用的就是加 減 乘 除,而它們的性質又有些相似。所以,它們的運算子實現方式也有些相似。共有三種實現方式 首先,我們介紹怎樣使用友鄰函式定義操作符過載。看下面的 include class cents 使...

C 學習 運算子過載

運算子過載的本質 過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。非成員函式 需要為每次操作傳遞兩個引數 box oper...

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...