freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c多態(tài)性課件講座(編輯修改稿)

2024-10-27 16:41 本頁面
 

【文章內(nèi)容簡介】 y:yendl。} coord coord::operator ++() //定義成員運(yùn)算符函數(shù) operator ++() { ++x。 ++y。 return *this。 } 33 接 1 例 void main() { coord ob(10,20)。 ()。 ++ob。 //隱式調(diào)用成員運(yùn)算符函數(shù) operator++( ) ()。 ++()。 //顯式調(diào)用成員運(yùn)算符函數(shù) operator ++() ()。 } 程序運(yùn)行結(jié)果如下: x:10, y:20 x:11, y:21 x。12, y=22 本例主函數(shù) main()中調(diào)用成員運(yùn)算符函數(shù) operator++()采用了兩種方法: ++ob。 與 ++() 兩者是等價的,其執(zhí)行效果是完全相同的。 從本例還可以看出,當(dāng)成員函數(shù)重載單目運(yùn)算符時,沒有參數(shù)被顯式地傳遞給成員運(yùn)算符函數(shù)。參數(shù)是通過 this指針隱含地傳遞給函數(shù)的。 34 采用成員函數(shù)重載單目運(yùn)算符時,可以用以下兩種方法來使用: @aa。 //隱式調(diào)用 @()。 //顯式調(diào)用 成員運(yùn)算符函數(shù) operator @所需的一個操作數(shù)由對象 aa通過 this指針隱含地傳遞。因此,在它的參數(shù)表中沒有參數(shù)。 35 我們對成員運(yùn)算符函數(shù)與友元運(yùn)算符函數(shù)作一比較。 ( 1)對雙目運(yùn)算符 ,成員運(yùn)算符函數(shù)帶有一個參數(shù) ,友元運(yùn)算符函數(shù)帶有兩個參數(shù)對單目運(yùn)算符 ,成員運(yùn)算符函數(shù)不帶參數(shù) ,友元運(yùn)算符函數(shù)帶有一個參數(shù)。 (2)雙目運(yùn)算符一般可以被重載為友元運(yùn)算符函數(shù)或成員運(yùn)算符函數(shù) ,但有一種情況 ,必須使用友元函數(shù)。 例如 ,在例 類 AB 中 ,用成員運(yùn)算符函數(shù)重載 “ +”運(yùn)算 AB AB::operator+(int x) { AB temp。 =a+x。 =b+x。 return temp。 } 36 若類 AB的對象 ob要做賦值運(yùn)算和加法運(yùn)算,以下是一條正確的語句 ob=ob+100。 由于對象 ob是運(yùn)算符 “ +”的左操作數(shù),所以它調(diào)用了 “ +”運(yùn)算符重載函數(shù),把一個整數(shù)加到了對象 ob的某些元素上去。然而,下一條語句就不能工作了: ob=100+ob。 不能工作的原因是運(yùn)算符的左操作數(shù)是一個整數(shù),而整數(shù)是一個內(nèi)部數(shù)據(jù)類型, 100不能產(chǎn)生對成員運(yùn)算符函數(shù)的調(diào)用。 37 用兩種形式的友元函數(shù)來重載運(yùn)算符函數(shù) “ +” 就能消除由于運(yùn)算符 “ +”的左操作數(shù)是內(nèi)部數(shù)據(jù)類型而帶來的問題,下述程序說明了如何實(shí)現(xiàn)。 例 用兩種形式的友元函數(shù)來重載運(yùn)算符函數(shù) “ +” include class AB{ int a,b。 public: AB(int x=0,int y=0) {a=x。b=y} friend AB opterator +(AB ob,int x)。 //聲明一種友元運(yùn)算符函數(shù) friend AB opterator +(int x,AB ob)。 //聲明另一種友元運(yùn)算符函數(shù) void show()。 }。 38 接 1 例 AB operator +(AB ob,int x) //定義常規(guī)類型在右邊的友元運(yùn)算符函數(shù) { AB temp。 =a+x。 =b+x。 return temp。 } AB operator +(int x ,AB ob) //定義常規(guī)類型在左邊的友元運(yùn)算符函數(shù) { AB temp。 =x+。 =x+。 return temp。 } void AB::show() {cout―a=‖a‖ ――b=―b―\n‖。 } void main() { AB ob1(30,40),ob2。 ob2=ob1+30。 ()。 ob2=50+ob1。 ()。 } 39 ( 3) 成員運(yùn)算符函數(shù)和友元運(yùn)算符函數(shù)都可以用習(xí)慣方式調(diào)用,也可以用它們專用的方式調(diào)用,表 函數(shù)的調(diào)用形式。 習(xí)慣形式 友元運(yùn)算符函數(shù)調(diào)用形式 成員運(yùn)算符函數(shù)調(diào)用形式 a+b operator+(a,b) +(b) a operator(a) () a++ operator++(a,0) ++(0) ( 4) c++的大部分運(yùn)算符既可說明為成員運(yùn)算符函數(shù),又可說明為友元運(yùn)算符函數(shù)。究竟選擇哪一種運(yùn)算符函數(shù)好一些,沒有定論,這主要取決于實(shí)際情況和程序員的習(xí)慣。 一般而言,對于雙目運(yùn)算符,將它重載為一個友元運(yùn)算符函數(shù)比重載為一個成員運(yùn)算符函數(shù)便于使用。若一個運(yùn)算符的操作需要修改類對象的狀態(tài),則選擇成員運(yùn)算符函數(shù)較好。如果運(yùn)算符所需的操作數(shù)(尤其是第一個操作數(shù))希望有隱式類型轉(zhuǎn)換,則運(yùn)算符重載必須用友元函數(shù),而不能用成員函數(shù)。 40 有以下的經(jīng)驗(yàn): ? 對于單目運(yùn)算符,建議選擇成員函數(shù); ? 對于運(yùn)算符 “ =、 ( )、 [ ]、 ”只能作為成員函數(shù); ? 對于運(yùn)算符 “ +=、 =、 /=、 *=、 amp。=、 !=、 ~=、 %=、 =、=”,建議重載為成員函數(shù); ? 對于其他運(yùn)算符,建議重載為友元函數(shù)。 41 “++”和 “ ”的重載 運(yùn)算符 “ ++”和 “ ”放置在變量的前面與后面,其作用是有區(qū)別的。但是 C++ “ ++”(或 “ ”)時,不能顯式地區(qū)分是前綴還是后綴方式。也就是說,在例 main()函數(shù)中,以下兩條語句是完全相同的: ob++。 ++ob。 在 C++,編輯器可以通過在運(yùn)算符函數(shù)參數(shù)表中是否插入關(guān)鍵字 int 來區(qū)分這兩種方式。 (1) 前綴方式 ++ob,可以用運(yùn)算符函數(shù)重載為: ++()。 //成員函數(shù)重載 operator++(Xamp。ob)。 //友元函數(shù)重載,其中 ob為 X類對象 (2)后綴方式 ob++,可以用運(yùn)算符函數(shù)重載為: ++(int)。 //成員函數(shù)重載 operator++(Xamp。ob,int)。 //友元函數(shù)重載 調(diào)用時,參數(shù) int 一般用 0值。 重載運(yùn)算符 “ ”也可用類似的方法。 42 例 包含 “ ++”和 “ ”兩種重載運(yùn)算符 include include class over{ int i1, i2, i3。 public: void init(int I1, int I2, int I3) {i1=I1。 i2=I2。 i3=I3。} //給數(shù)據(jù)成員賦初值 void print()。 {cout― i1:” i1‖ i2:” i2‖ i3:” i3endl。 //顯示輸出數(shù)據(jù)成員 over operator++()。 //成員函數(shù)重載“ ++‖(前綴方式)聲明 over operator++(int)。 //成員函數(shù)重載“ ++‖(后綴方式)聲明 friend over operator (overamp。) ; //友元函數(shù)重載“ ‖(前綴方式)聲明 friend over operator (overamp。,int); //友元函數(shù)重載“ ‖(后綴方式)聲明 }; 43 接 1 例 over over::operator++() //定義成員函數(shù)重載“ ++‖(前綴方式) { ++i1。 ++i2。 ++i3。 return *this: } over over::operator++(int) //定義成員函數(shù)重載 ++‖(后綴方式) { i1++。 i2++。 i3++。 return *this。 } over operator (overamp。op) //定義友元函數(shù)重載“ ‖(前綴方式) { 。 。 。 return op。 } over operator (overamp。op, int)//定義友元函數(shù)重載“ ‖(后綴方式) { 。 。 。 return op。 } 44 接 2 例 Void main() { over obj1, obj2, obj3, obj4。 (4,2,5)。 (2,5,9)。 (8,3,8)。 (3,6,7)。 ++obj1。 //隱式調(diào)用 over operator++() obj2++。 //隱式調(diào)用 over operator++(int) obj3。 //隱式調(diào)用 over operator (overamp。) obj4。 //隱式調(diào)用 over operator (overamp。,int) ()。 ()。 ()。 ()。 cout‖\n‖。 ++()。 //顯式調(diào)用,意為 ++obj1 ++(0)。 //顯示調(diào)用,意為 obj2++ operator(obj3)。 //顯示調(diào)用,意為 obj3 operator(obj4,0)。 //顯示調(diào)用,意為 obj4 ()。 ()。 ()。 ()。 } 程序運(yùn)行結(jié)果如下: i1:5 i2:3 i3:6 i1:3 i2:6 i3:10 i1:7 i2:2 i3:7 i1:2 i2:5 i3:6 i1:6 i2:4 i3:7 i1:4 i2:7 i3:11 i1:6 i2:1 i3:6 i1:1 i2:4 i3:5 以上例子中,使用成員函數(shù)分別以前綴方式和后綴方式重載了運(yùn)算符“ ++‖,使用友元函數(shù)分別以前綴方式和后綴方式重載了運(yùn)算符“ ‖。 45 5. 3. 6賦值運(yùn)算符 “ =”的重載 對任一類 X,如果沒有用戶自定義的賦值運(yùn)算符函數(shù),那么系統(tǒng)將自動地為其生成一個默認(rèn)的賦值運(yùn)算符函數(shù),例如: X﹠ X:: operator=(const X ﹠ source) { //成員間賦值 } 若 obj1和 obj2是類 X的兩個對象, obj2已被創(chuàng)建,則編譯程序遇到如下語句: obj1=obj2。 就調(diào)用 默認(rèn) 的賦值運(yùn)算符函數(shù),將對象 obj2的數(shù)據(jù)成員逐域拷貝到對象 obj1中。 通常 , 默認(rèn) 的賦值運(yùn)算符函數(shù)是能夠勝任工作的 。 但在某些特殊情況下 , 如類中有指針類型時 , 使用 默認(rèn) 賦值運(yùn)算符函數(shù)會產(chǎn)生錯誤 , 這個錯誤叫 “ 指針懸掛 ” , 這時程序員不得不自行重載 賦值運(yùn)算符 , 請看下面的例子 。 1. 指針懸掛問題 46 例 5. 11 include include class string{ char *ptr。 public: string(char *s) { ptr=new char[strle
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1