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

正文內(nèi)容

c多態(tài)性課件講座(留存版)

2024-11-08 16:41上一頁面

下一頁面
  

【正文】 friend over operator (overamp。 。 ()。 public: string(char *s) { ptr=new char[strlen(s)+1]。這時盡管 p1的指針 ptr存在,其所指向的空間卻無法訪問了,如圖所示。 ptr=new char[strlen()+1]。 51 下標運算符“ [ ]‖的重載 C++中運算符“ [ ]‖可作數(shù)組下標,下標運算符的一般使用格式為: 〈 基本表達式 〉 [〈 表達式 〉 ] 我們可以對運算符“ [ ]‖ 進行重載, 使它起別的作用 。 例 5. 14 include include class Vector4 { private: int v[4]。 } ? 在上述程序中,并沒有創(chuàng)建 Vector4的對象數(shù)組。 相當與: [ ](1)=[ ](3)。irow*col。 float j。 (1) 隱式類型轉(zhuǎn)換 隱式類型轉(zhuǎn)換主要遵循以下規(guī)則 : ① 在賦值表達式 A=B的情況下 , 賦值運算符右端 B的值需轉(zhuǎn)換為 A 類型后進行賦值。 coutInializing with :numendl。 int(obj) 69 關(guān)于類類型轉(zhuǎn)換函數(shù),有以下幾點說明: (1)類型轉(zhuǎn)換函數(shù)只能定義為一個類的成員函數(shù)而不能定義為類的友元函數(shù)。 } 71 void print() { cout39。第二次采用顯式調(diào)用的方式 ,將類 plex的對象B轉(zhuǎn)換成 int 類型。 } 程序運行結(jié)果如下: Construcing... Construcing... real: 1 imag: 2 real: 3 imag: 4 Type changed to int ... Type changed to int ... real: 5 imag:5 74 虛函數(shù) 虛函數(shù) 是一種動態(tài)的 重載方式,虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系在運行時才建立,也就是在運行時才決定如何動作,即所謂 動態(tài)聯(lián)編。 } }。 ( )。 ()。 return real。 類型轉(zhuǎn)換函數(shù)則可以用來把源類類型轉(zhuǎn)換成另一種目的類型 。 void print ()。 obj1(10,100)。下面的程序?qū)椭覀兝斫?函數(shù)調(diào)用 運算符“ ()‖的重載。 Matrix::Matrix(int row, int col) //構(gòu)造函數(shù) { thisrow=row。 string::opertor[ ](int I) { return ptr[I]。 v[3]=v[2]。 coutv[2]; //出錯,不能訪問私有成員。p2,string amp。string::opertor=(const string amp。 } 47 接 1 例 運行上述程序輸出 p1時發(fā)生錯誤。 就調(diào)用 默認 的賦值運算符函數(shù),將對象 obj2的數(shù)據(jù)成員逐域拷貝到對象 obj1中。 //隱式調(diào)用 over operator (overamp。 return op。 {cout― i1:” i1‖ i2:” i2‖ i3:” i3endl。也就是說,在例 main()函數(shù)中,以下兩條語句是完全相同的: ob++。 } void AB::show() {cout―a=‖a‖ ――b=―b―\n‖。 不能工作的原因是運算符的左操作數(shù)是一個整數(shù),而整數(shù)是一個內(nèi)部數(shù)據(jù)類型, 100不能產(chǎn)生對成員運算符函數(shù)的調(diào)用。 從本例還可以看出,當成員函數(shù)重載單目運算符時,沒有參數(shù)被顯式地傳遞給成員運算符函數(shù)。 //聲明成員運算符函數(shù) operator ++() }。 所用的運算符 “ +‖、 “ ‖、 “ *” 、 “ /‖是重載后的運算符。 if(imag!=0)coutimagi\n。 } plex plex::operator (plex c) //重載 “ ‖定義 { plex temp。 在類 X中聲明了重載 “ +‖的成員運算符函數(shù),返回類型為int,它具有兩個操作數(shù),一個是當前對象,另一個是對象 a。 } 23 void main() { coord ob(10,20)。因此,在 operator++函數(shù)中,任何內(nèi)容的改變不會影響產(chǎn)生調(diào)用的操作數(shù),也就是說。 public: coord (int i=0, int j=0) { x=i。 //隱式調(diào)用 opreator (aa,bb) //顯式調(diào)用 19 3.單目運算符重載 用友元函數(shù)重載單目運算符時,需要一個顯式的操作數(shù)。 =(**)*t。 15 接 1 例 plex operator +(plex a,plex b) //重載“ +‖定義 { plex temp。 11 友元運算符函數(shù) 把運算符函數(shù)定義成某個類的友元函數(shù) ,稱為友元運算符函數(shù)。 total1=operator+(1,2)。 若要將上述類 plex的兩個對象相加,只要寫一個運算符函數(shù)operator+() plex operator+(plex om1,plex om2) { plex temp。 5 運算符重載 在 C++中,除了可以對函數(shù)重載外,還可以對大多數(shù)運算符實施重載。} //基類中的 area函數(shù) }。1 第五章 多態(tài)性 2 編譯時的多態(tài)性與運行時的多態(tài)性 多態(tài)性是指用 同一個名字 定義不同的函數(shù),這些函數(shù) 執(zhí)行不同 但又類似的 操作 。 class circle:public point{ int radius。 運算符重載通過創(chuàng)建運算符函數(shù) operator()來實現(xiàn)。 =+。 //調(diào)用運算符函數(shù) operator+()的第一種方式 coutreal1=‖ imag1=endl。 友元運算符函數(shù)在類的內(nèi)部 聲明 格式如下: class X { //...... friend 返回類型 operator 運算符 (參數(shù)表 ); //...... }。 =+。 return temp。 例 用友元函數(shù)重載單目運算符 “ ”例子。 y=j。實際上對象 x和 y并未增加。 ()。 例 用雙目運算符函數(shù)進行復(fù)數(shù)運算的例子 27 include class plex{ private: double real。 =。 } void main() { plex A1(,),A2(,),A3,A4,A5,A6。程序執(zhí)行到這四條語句時 C++將其解釋為: A3= +(A2)。 coord::coord(int i,int j) {x=i。參數(shù)是通過 this指針隱含地傳遞給函數(shù)的。 37 用兩種形式的友元函數(shù)來重載運算符函數(shù) “ +” 就能消除由于運算符 “ +”的左操作數(shù)是內(nèi)部數(shù)據(jù)類型而帶來的問題,下述程序說明了如何實現(xiàn)。 } void main() { AB ob1(30,40),ob2。 ++ob。 //顯示輸出數(shù)據(jù)成員 over operator++()。 } over operator (overamp。,int) ()。 通常 , 默認 的賦值運算符函數(shù)是能夠勝任工作的 。原因是執(zhí)行到賦值語句 p2=p1時,實際是使對象 p2的指針 ptr與對象 p1的指針 ptr指向 new開辟的同一個空間。s) //定義賦值運算符重載 { if(this==amp。p1) 這時,表達式: p1=chen‖ 將被解釋為: operator=(p1,―chen‖) 這顯然是沒有什么問題的, 但對于表達式 chen=p1 將被解釋為: operator=(chen,p1) 即 C++編譯器首先將“ chen‖轉(zhuǎn)換成一個隱藏的 string對象,然后使用對象 p2引用該隱藏對象,編譯器不認為這個表達式是錯誤的,從而將導(dǎo)致賦值語句上的混亂。 } 即使把 int v[4]。 coutv[3]endl。 } 由于 string::operator[ ]( )的返回值在這里是一個 charamp。 thiscol=col。 設(shè) obj是類 myclass的對象,而且類 myclass中定義了重載函數(shù)調(diào)用運算符“()”,它起的作用是能把對象 obj的數(shù)據(jù)擴大 k 倍和 m 倍。 //重載運算符“()”的調(diào)用,可解 // 釋為 ()(10,.100) ()。 }。它是一種類似顯式類型轉(zhuǎn)換的機制。 } operator int() //把 plex類對象的實部轉(zhuǎn)換成普通的整數(shù) { cout39。 coutint(B)*2endl。 ( )。 Void main( ) { my_base mb(50,50), *mp。 // a1, a2先轉(zhuǎn)換成整數(shù): 1+2=3, 3+4=7, // 再通過整數(shù)轉(zhuǎn)換成對象成員的構(gòu)造函數(shù) , 賦給 a3 ( )。第一次采用顯式調(diào)用的方式,將類 plex的對象A轉(zhuǎn)換成float類型。 return int (real)。 使用類型轉(zhuǎn)換函數(shù)的方法與對基本類型強制轉(zhuǎn)換一樣,例如: X obj。 { num=n。 對于系統(tǒng)預(yù)定義類型 , C++提供兩種類型轉(zhuǎn)換方式 , 一種是隱式類型轉(zhuǎn)換 (或稱標準類型轉(zhuǎn)換 ), 另一種是顯式類型轉(zhuǎn)換 。 include class myclass{ int i。 for(int i=0。 op[1]=op[3]。 coutv[2]endl。要用 [2] 53 我們可用重載運算符“ [ ]‖ 的方法,方便的引用數(shù)組成員。 ( 2)類的賦值運算符“ =‖可以被重載,但重載了的運算符函數(shù)operator=()不能被繼承。 delete ptr。這樣, p2中的 ptr原來所指向的區(qū)域被封鎖起來,并不能再被使用,這就產(chǎn)生了指針懸掛問題。 1. 指針懸掛問題 46 例 5. 11 include include class string{ char *ptr。 ()。 。 //成員函數(shù)重載“ ++‖(后綴方式)聲明 friend over operator (overamp。 (1) 前綴方式 ++ob,可以用運算符函數(shù)重載為: ++()。 ()。 public: AB(int x=0,int y=0) {a=x。 //隱式調(diào)用 ()。} void coord::print() {cout x:x,y:yendl。 A5= *(A2)。 //復(fù)數(shù)相加 A4=A1A2。 return temp。 //復(fù)數(shù)的虛數(shù)部分 public: plex(double r=,double i=)。 //隱式調(diào)用友元運算符函數(shù) ()。),這樣函數(shù)參數(shù)的任何改變都影響產(chǎn)生調(diào)用的操作數(shù),從而保持了兩個運算符的原意。 } friend coord operator++(coord op)。 public: AB(int x=0,int y=0) {a=x。 if(imag0) cout―+‖。 return temp。與成員運算符函數(shù)不同,友元運算符函數(shù)是不屬于任何類對象的,它沒有 this指針。//調(diào)用運算符函數(shù) operator+()的第二種方 coutreal2=‖ imag2=endl。 return temp。 函數(shù) operator()可以 (1)外部函數(shù) (2)類的友元函數(shù) (3)是類的成員函數(shù)
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1