一,操作符過載
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 在兩端插入刪除 但...