1.運算子過載:
(1)呼叫operator+()方法:
total=coding.operator+(fixing); //函式表示法
total=coding+fixing; //運算子表示法
(2)過載限制
a.過載後的運算子必須至少有乙個運算元是使用者定義的型別,這將防止使用者為標準型別過載運算子。例如,減法運算子(-)計算兩個double值的差,而不是和
b.使用運算子時不能違反運算子原來的句法規則。例如,不能將求模運算子(%)過載成使用乙個運算元
c.不能修改運算子的優先順序
d.不能建立新運算子,如不能定義operator**()函式來表示求冪
e.不能過載下面的運算子
——sizeof:sizeof運算子
——.:成員運算子
——.*:成員指標運算子
——:::作用域解析運算子
——?::條件運算子
——typeid:乙個rtti運算子
——const_cast:強制型別轉換運算子
——dynamic_cast:強制型別轉換運算子
——reinterpret_cast:強制型別轉換運算子
——static_cast:強制型別轉換運算子
f.只能通過成員函式進行過載:
=:賦值運算子
():函式呼叫運算子
[ ]:下標運算子
—>:通過指標訪問類成員運算子
(3)過載加法運算子(+)、過載減法運算子(—)、過載乘法運算子(*)
time operator+(const time & t) const;
time operator—(const time & t) const;
time operator*(double n) const;
2.友元
(1)友元函式類宣告:
friend time operator *(double m, const time & t);
說明:operator*()函式是非成員函式,因此不能使用成員運算子來呼叫;
operator*()函式的訪問許可權和成員函式一樣
(2)友元函式定義:不使用關鍵字friend,不使用(::)限定符
time operator*(double m,const time & t)
3.常用的友元:過載《運算子
(1)《的第一種過載版本
可以通過使用友元函式,像下面這樣過載運算子:
void operator<<(ostream & os,const time & t)
;(2)為vector類過載算術運算子:如果方法通過計算得到乙個新的類物件,則應考慮是否可以使用類建構函式來完成這種工作。這樣做不僅可以避免麻煩,而且可以確保新的物件是按正確的方式建立的。
(3)將資料寫入檔案中:
#include.....
ofstream fout;
fout.open("thewaslk.txt");
然後在計算結果的迴圈中加入類似於下面的**:
fout《這將調用友元函式operator<<(fout,result),導致引用引數os指向fout,從而將輸出寫入到檔案中
(4)多種表示方式:設計類時,將使得使用者修改了向量的一種表示後,物件自動更新另一種表示,使物件有這種智慧型,是c++類的另乙個優點。
6.類的自動轉換和強制型別轉換
(1)當建構函式只接受乙個引數時,可以使用下面的格式來初始化類物件:
stonewt incognito=275; //隱式型別轉換
stonewt incognito(275);
stonewt incognito=stonewt(275);
注意:只接受乙個引數的建構函式定義了從引數型別到類型別的轉換。如果使用關鍵字explicit限定了這種建構函式,則它只能用於顯式轉換,否則也可以用於隱式轉換
(2)轉換函式:operator typename();
注意:轉換函式必須是類方法**換函式為類成員);轉換函式不能指定返回型別;轉換函式不能有引數
(3)c++11中可以使用expicit顯式宣告轉換函式:
class stonewt
;
另一種方法是,用乙個功能相同的非轉換函式替換轉換函式,但僅在被顯式地呼叫時,該函式才會執行
stonewt::operator int()
//替換為:
int stonewt::stone_to_int()
int plb=poppins.stone_to_int(); //轉換
7.過載加法運算子:
(1)使用成員函式:如果運算子是類成員函式,則第乙個運算元是呼叫物件
stonewt stonewt::operator+(const stonewt &st) const
(2)使用友元函式
stonewt operator+(const stonewt & st1, const stonewt & st2)
WPF學習之路(十三)URL
url一般由三個部分組成,協議 資源所在主機位址 資源路徑 資源檔案 本地程式集 引用的程式集 內容檔案 uri uri new uri pack siteoforigin soofile.xaml urikind.absolute 源站點檔案 uri uri new uri pack siteof...
Python小白學習之路(十三) 遞迴呼叫
在函式內部,可以呼叫其他函式。如果在呼叫乙個函式的過程中直接或間接呼叫自身本身,則稱為遞迴呼叫 從某種意義上來說,遞迴呼叫可以實現無限迴圈 遞迴呼叫就是乙個問路的過程。通過乙個程式以及其執行過程來更好的理解遞迴呼叫 1 import time 2 person list rachel monica ...
學習之路三十三 重構技巧的學習
最近看了聖殿騎士大哥的重構文章,其中有幾個重構技巧讓我頗有感觸,特此記錄下。1.封裝集合,返回集合介面型別 這個技巧讓我想起了專案中的 比如 1 public class check29 1011public class detail 1214 如果這樣設計,那麼使用者通過呼叫getdetails方...