c primer 第十一章 使用類

2021-08-26 18:46:38 字數 2212 閱讀 1139

一,操作符過載

1)函式過載(多型)

名稱相同,特徵標(引數列表)不同的函式。完成相同的基本操作

2)操作符左側的對像是呼叫物件,操作符右側的作為引數被傳遞的物件

3)過載限制:1>過載後的操作符至少有乙個運算元是使用者定義的型別。防止使用者為標準型別過載操作符

2>使用操作符,不能違反操作符原來的句法規則。

3>不能修改操作符優先順序,不能定義新的操作符

4>可被過載的操作符:

+ - * / % ^ & | ~

! = < > + = -= *= /= %=

^= &= | =<< >> > >= << == = !=

<= >= && || ++ -- [ ] ( ) ->

->* , new new[ ] delete delete[ ]

4)不要返回區域性變數的引用,因為函式執行完畢後,區域性變數將會消失

二,操作符過載示例

#include class time

;time::time()

time::time(int h, int m)

void time::addhr(int h)

void time::addmin(int m)

void time::reset(int h, int m)

time time::operator +(const time& t) const

time time::operator -(const time& t) const

time time::operator *(double mult) const

void time::show() const

如果寫成如下形式可以不用友元函式(不用訪問私有成員)

time operator* (double m,const &t)

5,常用的友元:過載《操作符

1>"<<" 過載之輸出物件

void operator<< (ostream &os,time &t)

使用:cout<

不能這樣使用:cout<<"the time is:"<

如果想這樣使用

void &operator<<(ostream &os,time &t)

四,類的自動轉換和強制型別轉換

1,例子:long count = 8; 將整型自動轉化為long 型

int *p=10; //非法的

int *p=(int *)10;//將指標設定為位址10

2,接受乙個引數的建構函式 可以作為轉換函式

explicit 關鍵字用來關閉自動轉換特性

int 強制轉換 將待轉換的值 四捨五入為最接近的值

五,複習

1)成員函式和友元函式區別

成員函式:類的組成部分,可以直接訪問物件的成員而不用使用成員操作符

友元函式:友元函式不是類組成部分,不能隱式訪問類成員

2)非成員函式訪問類成員,必須是友元麼?

要訪問私有成員,必須是友元。而訪問共有成員可以不是友元

3)過載操作符= () [ ] ->必須使用成員函式來定義

C Primer 第十一章 使用類筆記

以加法為例 函式名 time time operator const time time 乙個類類相加的過載運算子 呼叫時 sum a b 如果a b都是time類,則等價於sum a.operator b 過載限制 1.過載後的運算子至少有乙個運算元是使用者定義的型別。2.不能建立新運算子 3.過...

C Primer 答案 第十一章

11.1 map 關聯容器,存放key和value vector 順序容器,只存value 11.2 list 經常在任何位置刪除新增資料 vector 沒別的要求一般就用它 deque 棧 map 字典 set 數學集合 11.3 and 11,4 include include include ...

C Primer 第十一章答案

關聯容器map,set 習題11.1 map是鍵 值對應,其可儲存兩個型別,而vector單單是乙個型別的儲存容器。map通過關鍵字獲得值,而vector 通過迭代器或者下標引索獲得。習題11.2 list 頻繁需要插入 刪除操作 vector 需求更多的隨機訪問操作 deque 在兩端插入刪除 但...