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

正文內(nèi)容

c多態(tài)性課件講座(參考版)

2024-10-11 16:41本頁面
  

【正文】 Void main( ) { my_base mb(50,50), *mp。 cout ―c=―cendl。 public: my_class(int x, int y,int z):my_base(x,y) { c=z。 } }。 } //基類的構(gòu)造函數(shù) void show( ) { cout ―基類 my_base\n‖。 public: my_base(int x, int y) { a=x。 引入派生類后,由于派生類是由基類派生出來的,因此指向基類的指針和指向派生類的指針是相關的。 // a1, a2先轉(zhuǎn)換成整數(shù): 1+2=3, 3+4=7, // 再通過整數(shù)轉(zhuǎn)換成對象成員的構(gòu)造函數(shù) , 賦給 a3 ( )。 ( )。 void main( ) { plex a1(1,2),a2(3,4)。 } 73 void print() {cout ―real:‖real―\t‖―imag:‖imagendl。 } opeator int() //對象實部虛部之和,轉(zhuǎn)換成整數(shù) { cout―Type changed to int ...\n‖。 cout ―Constructing...\n‖。 public: plex(float r,float i) { real=r。 72 類型轉(zhuǎn)換函數(shù)還可以作某些運算再轉(zhuǎn)換,例如下列程序中通過real+image運算,使類 plex的對象 實部虛部之和轉(zhuǎn)換成整數(shù) 。第一次采用顯式調(diào)用的方式,將類 plex的對象A轉(zhuǎn)換成float類型。 coutint(B)*2endl。 plex B(4, 6)。 ()。 } }。)39。,39。(39。 return int (real)。 } operator int() //把 plex類對象的實部轉(zhuǎn)換成普通的整數(shù) { cout39。 } operator float()//把 plex類對象的實部轉(zhuǎn)換成普通的實數(shù) { coutType changed to float… \n。 imag=i。 70 例5 .18 include class plex{ private: float real, imag。C++編譯器將根據(jù)操作數(shù)的類型自動的選擇一個合適的類型轉(zhuǎn)換函數(shù)之匹配。 (3)在函數(shù)體中必須返回具有目的類型的一個數(shù)據(jù)。類型轉(zhuǎn)換函數(shù)與普通的成員函數(shù)一樣,也可以在類定義體中聲明函數(shù)聲明,而將函數(shù)體定義在類外部。 使用類型轉(zhuǎn)換函數(shù)的方法與對基本類型強制轉(zhuǎn)換一樣,例如: X obj。它是一種類似顯式類型轉(zhuǎn)換的機制。它只能從基本類型(如 int,float等)向類類型轉(zhuǎn)換,而想將一個類類型向基本類型轉(zhuǎn)換是辦不到的。語句②將6轉(zhuǎn)換為類類型 example后賦給對象Y,轉(zhuǎn)換也是通過構(gòu)造函數(shù)example( int)完成的。 ② ()。 cout————————\n。 67 void main() { example X=example(3)。 } void example::print() { coutnum=numendl。 { num=n。 }。 public: example(int)。 1. 通過構(gòu)造函數(shù)進行類型轉(zhuǎn)換 構(gòu)造函數(shù)具有類型轉(zhuǎn)換的作用,它將 其他類型的值裝換為它所在類的類型的值 。 65 類類型與系統(tǒng)預定義類型間的轉(zhuǎn)換 前面介紹的是一般數(shù)據(jù)類型之間的轉(zhuǎn)換。 ② 函數(shù)法 函數(shù)法函數(shù)法的轉(zhuǎn)換格式為: 類型名(表達式) 在上面的例子中,若采用函數(shù)法則變?yōu)椋? int i, j。 64 (2) 顯式類型轉(zhuǎn)換 顯式類型常用下述方法表示 : ① 強制轉(zhuǎn)換法 強制轉(zhuǎn)換法的格式為:(類型名)表達式 例如: int i, j // ………… cout(float)(i+j)。 ②當 char或 short類型變量與 int 類型變量進行運算時 , 將 char或short 類型轉(zhuǎn)換成 int 類型。 對于系統(tǒng)預定義類型 , C++提供兩種類型轉(zhuǎn)換方式 , 一種是隱式類型轉(zhuǎn)換 (或稱標準類型轉(zhuǎn)換 ), 另一種是顯式類型轉(zhuǎn)換 。 //重載運算符“()”的調(diào)用,可解 // 釋為 ()(10,.100) ()。 ()。 return *this。 j=j*m。 } }。 } myclass operator( )( int k, float m )。 public: myclass(int x=0,float y=0) { I=x。 include class myclass{ int i。 設 obj是類 myclass的對象,而且類 myclass中定義了重載函數(shù)調(diào)用運算符“()”,它起的作用是能把對象 obj的數(shù)據(jù)擴大 k 倍和 m 倍。重載運算符“ ()‖的operator函數(shù)可以帶任何類型的操作數(shù),返回任何有效的類型。 我們知道,雙目運算符是由左邊的對象產(chǎn)生對 operator函數(shù)調(diào)用的。 //重載運算符“()”的調(diào)用,由于引用,可放左邊 coutendlaM(3,4)endl。 //生成對象 aM coutaM(3,4)。Matrix::operator()(int r,int c) //定義重載運算符“()”函數(shù) { return (*(m+r*col+c))。 i++) *(m+i)=i。 for(int i=0。 thiscol=col。 //聲明重載運算符“()”函數(shù) }。 int amp。 int row, col。 對運算符 “ [ ]‖ 重載定義只能使用成員函數(shù),其形式如下: 返回類型 類名 ::operator( ) (形參表 ) { // 函數(shù)體 } 注意:形參只能有一個。 則表達式 X(5)。 因而 op的新值為 “ adcd 57 函數(shù)調(diào)用運算符 “ () ” 的重載 C++中運算符“ ( )‖可作函數(shù)調(diào)用,函數(shù)調(diào)用的一般使用格式為: 函數(shù)名 ( 實參表 ) 我們可以對運算符“ ( )‖ 進行重載, 使它起別的作用 。 op[1]=op[3]。 } 由于 string::operator[ ]( )的返回值在這里是一個 charamp。 56 其中重載“ [ ]‖的 operator函數(shù)定義為: char amp。operator[ ](int)。 //……………… public: string(const char *)。 ? 與函數(shù)調(diào)用運算符“ ()‖一樣,下標運算符“ [ ]‖不能用友元函數(shù)重載,只能采用成員函數(shù)重載。 ? 重載下標運算符“ [ ]‖時,返回一個 int的引用,可使重載的“ [ ]‖用的賦值語句的左邊,因為在 main () 中,可對某個數(shù)組成員元素 v[ ]賦值。程序中的下標被重載,以便在使用 Vector4的對象內(nèi)的數(shù)組成員時,用一種特殊的方式工作。 coutv[2]endl。 coutv[3]endl。 coutv[2]endl。 } }。 exit(1)。} int amp。v[2]=a3。 public: Vector4(int a1, int a2, int a3, int a4) { v[0]=a1。要用 [2] 53 我們可用重載運算符“ [ ]‖ 的方法,方便的引用數(shù)組成員。 } 即使把 int v[4]。 void main() { Vector4 v(1,2,3,4)。v[3]=a4。v[1]=a2。 52 重載運算符“ [ ]‖來處理數(shù)組成員的例子 例 5. 13 include include class Vector4 { private: int v[4]。 可被解釋為: [ ](5)。 在重載“ [ ]‖時, C++也把它看成雙目運算符,例如 X[Y]可看成 [ ] 雙目運算符 X 左操作數(shù) Y 右操作數(shù) 設 X是某個類的對象,類中定義了重載下標運算符“ [ ]‖: operator[ ]函數(shù)。 ( 2)類的賦值運算符“ =‖可以被重載,但重載了的運算符函數(shù)operator=()不能被繼承。p1) 這時,表達式: p1=chen‖ 將被解釋為: operator=(p1,―chen‖) 這顯然是沒有什么問題的, 但對于表達式 chen=p1 將被解釋為: operator=(chen,p1) 即 C++編譯器首先將“ chen‖轉(zhuǎn)換成一個隱藏的 string對象,然后使用對象 p2引用該隱藏對象,編譯器不認為這個表達式是錯誤的,從而將導致賦值語句上的混亂。operator=(string amp。 ()。 ()。 p2=p1。 } void main() { string p1(chen)。 strcpy(ptr,)。 delete ptr。s) //定義賦值運算符重載 { if(this==amp。 //聲明賦值運算符重載函數(shù) }; string amp。operator=(const stringamp。 } void print() {countptrendl。 strcpy(ptr,s)。 include include class string{ char *ptr。當 p1的生命走其結(jié)束時,將再次調(diào)用析構(gòu)函數(shù),釋放同一空間,從而導致運行錯誤。這樣, p2中的 ptr原來所指向的區(qū)域被封鎖起來,并不能再被使用,這就產(chǎn)生了指針懸掛問題。原因是執(zhí)行到賦值語句 p2=p1時,實際是使對象 p2的指針 ptr與對象 p1的指針 ptr指向 new開辟的同一個空間。 ()。 ()。 p2=p1。 程序運行結(jié)果如下: p2:chen p1: ♀ ♀ Null Point assignment void main() { string p1(chen)。 } void print() { contptrendl。 strcpy(ptr,s)。 1. 指針懸掛問題 46 例 5. 11 include include class string{ char *ptr。 通常 , 默認 的賦值運算符函數(shù)是能夠勝任工作的 。 45 5. 3. 6賦值運算符 “ =”的重載 對任一類 X,如果沒有用戶自定義的賦值運算符函數(shù),那么系統(tǒng)將自動地為其生成一個默認的賦值運算符函數(shù),例如: X﹠ X:: operator=(const X ﹠ source) { //成員間賦值 } 若 obj1和 obj2是類 X的兩個對象, obj2已被創(chuàng)建,則編譯程序遇到如下語句: obj1=obj2。 ()。 ()。 //顯示
點擊復制文檔內(nèi)容
規(guī)章制度相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1