C 學習之路(十三)

2021-09-05 03:13:32 字數 2590 閱讀 9683

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方...