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

正文內(nèi)容

c應用與開發(fā)案例教程(中)ppt-資料下載頁

2025-01-05 03:09本頁面
  

【正文】 mp。 second_obj。 pwho()。 } 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 程序的輸出結果為: base 1 first derivation 2 second derivation 3 這里,語句 pwho( )出現(xiàn)了 3次,由于 p所指向的對象不同,每次出現(xiàn)都執(zhí)行了 who( )的不同實現(xiàn)版本?;惖奶摵瘮?shù) who( )定義了一種接口,在派生類中為此接口定義了不同的實現(xiàn)版本,由于虛函數(shù)的解釋機制,實現(xiàn)了“單界面、多實現(xiàn)版本”的思想。這種在運行時刻將函數(shù)界面與函數(shù)的不同實現(xiàn)版本進行匹配的過程,稱為動態(tài)綁定,也稱為運行時的多態(tài)性。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 用虛函數(shù)實現(xiàn)運行時多態(tài)性的關鍵之處是:必須用指向基類的指針訪問虛函數(shù)。盡管可以像調(diào)用其他成員函數(shù)那樣顯示地用對象名來調(diào)用一個虛函數(shù),但只有在同一個指向基類的指針訪問虛函數(shù)時,運行時多態(tài)性才能實現(xiàn)。由于 p指向的對象不同,因此調(diào)用了 who( )的 3個不同實現(xiàn)版本,這時,稱為函數(shù) who( )具有虛特性。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 基類函數(shù)具有虛特性的條件是: 1.在基類中,將該函數(shù)說明為虛( virtual)函數(shù); 2.定義基類的公有派生類; 3.在基類的公有派生類中一模一樣地重載該虛函數(shù); 4.定義指向基類的指針變量,它指向基類的公有派生 類的對象。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 注意:在一個派生類中重新定義基類的虛函數(shù)是函數(shù)重載的另一種形式。但它不同于一般的函數(shù)重載。當重載一般的函數(shù)時,函數(shù)的返回類型和參數(shù)表可能是不相同的,僅函數(shù)名要求相同。但重載一個虛函數(shù)時,要求函數(shù)名、返回類型、參數(shù)個數(shù)。參數(shù)類型和順序是完全相同的。 如果函數(shù)原型不同,僅函數(shù)名相同, C++認為這是一般的函數(shù)重載,此時虛特性丟失。例如: 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) class base { public: virtual void vf1( )。 virtual void vf2( )。 virtual void vf3( )。 void f( )。 }。 class derived:public base { public: void vf1( )。 //具有虛特性 void vf2 (int)。 //一般函數(shù)重載 , 參數(shù)不同 ,虛特性丟失 char vf3( )。 //錯誤 :僅返回類型 不同 void f( )。 //一般的函數(shù)重載非虛 函數(shù)的重載 }。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) void g( ) { derived d。 base *bpamp。d。 //基類指針指向派生類 bpvf1( )。 //調(diào)用 derived: :vf1( ) bpvf2( )。 //調(diào)用 base: :vf2( ) bpf( )。 //調(diào)用 base: :f( ) } 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 在派生類 derived中的函數(shù) vf1( )與基類 base中的虛函數(shù)vf1( )具有完全相同的函數(shù)原型 ,故保持了虛特性;而函數(shù)vf2(int)與基類中的虛函數(shù) vf2( )參數(shù)不同 ,僅函數(shù)名相同 ,這只是一般函數(shù)的重載 ,其虛特性丟失;函數(shù) char vf3( )同基類的虛函數(shù) void vf3( )相比較 ,僅返回類型不同 ,目前的 C++實現(xiàn)認為這是錯誤的;函數(shù) f( )僅僅是基類非虛函數(shù) f( )的重載。 由于 vf1( )保持了虛特性 ,vf2( )丟失了虛特性,因此,在進行函數(shù)調(diào)用時,結果不一樣。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 在函數(shù) g( )中,語句 bpvf1( ),調(diào)用的 derived::vf1( )。在派生類 derived中,函數(shù) vf1定義為虛函數(shù),虛函數(shù)調(diào)用的解釋依賴于調(diào)用它的對象類型, bp雖然是指向基類的指針 ,但此刻指向的是派生類對象 d,因此,該語句等價 ( );另外一條語句 bpf( ),調(diào)用的卻是 base: :f()。 函數(shù) f( )在基類和派生類中均已定義,且函數(shù)原型相同 ,但它是一個非虛函數(shù),非虛函數(shù)調(diào)用的解釋僅依賴于表示調(diào)用它的對象的指針或引用類型。 bp被聲明為指向基類的指針,非虛函數(shù)的調(diào)用僅僅依賴 bp是指向基類的指針,而不在乎 bp此刻是否正在指向派生類的對象,它調(diào)用的是 base( );同樣地 ,語句 bpvf2( )調(diào)用的是 base: :vf2( )。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 虛函數(shù)的這種特性使派生類和虛函數(shù)成為許多 C++程序設計的關鍵,因為基類可以使用虛函數(shù)提供一個界面,這是該類的所有公有派生類都具有的共同界面,但派生類可以定義自己的實現(xiàn)版本 ,而且虛函數(shù)調(diào)用的解釋依賴于調(diào)用它的對象類型,指向基類對象的指針指向不同派生類的對象 ,就能訪問虛函數(shù)的不同實現(xiàn)版本。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 虛函數(shù)必須是類的成員函數(shù)。不能將虛函數(shù)說明為全局 (非成員的 )函數(shù),也不能說明為靜態(tài)成員函數(shù)。不能將友員說明為虛函數(shù),但虛函數(shù)可以是另一個類的友員。 一旦一個函數(shù)被說明為虛函數(shù),不管經(jīng)歷了多少派生類層,都將保持其虛特性。 當一個派生類沒有重新定義虛函數(shù)時,則使用其基類的虛函數(shù)版本。因此,在使用時要記住繼承的層次性。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 純虛函數(shù)及抽象類 基類往往表示一些抽象的概念。例如, shape是一個基類,它表示具有形狀的東西,從 shape可以派生出封閉圖形和非封閉圖形兩個派生類,封閉圖形又可以派生出橢圓形、多邊形等。這個類等級的基類 shape體現(xiàn)了一個抽象的概念,在 shape中定義一個求面積的函數(shù)顯然是無意義的,但可以將其說明為虛函數(shù),提供各派生類一個公共的界面,并由各派生類提供求面積函數(shù)的各自版本。在這種情況下,基類的有些虛函數(shù)沒有定義是很正常的,但是要求派生類必須重新定義這些虛函數(shù),以使派生類有意義。為此, C++引入了純虛函數(shù)的概念。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 純虛函數(shù)是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,要求任何派生類都必須定義自己的版本。為說明一純虛函數(shù),應使用如下格式: virtual type func_name (參數(shù)表 )=0; 這里, type是函數(shù)的返回類型, func_name是函數(shù)名。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 如果一個類至少有一個純虛函數(shù),那么就稱該類為抽象類。抽象類機制支持一般概念的表示。例如上面談到的形狀類 shape是一般的概念,可以表達為抽象類,它有許多具體的變種,如圓形和方形才是具體可用的類。抽象類也可用于定義接口,由派生類提供各種實現(xiàn)。抽象類只能用作其他類的基類,抽象類不能建立對象。抽象類不能用作參數(shù)類型、函數(shù)返回類型或顯式轉(zhuǎn)換的類型。但可以聲明抽象類的指針和引用。例如: 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) class point { … }。 class shape { point center。 … public: point where( ) { return center。 } void move (point p) { center=p。 draw( )。 } virtual void rotate (int)=0。 //純虛函數(shù)的定義 virtual void draw( )=0。 //純虛函數(shù)的定義 }。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) shape x。 //錯誤:抽象類不能建立對象 shape *p。 //可以聲明抽象類的指針 shape f( )。 //錯誤:抽象類不能作為返回類型 void g (shape)。 //錯誤:抽象類不能作為參數(shù)類型 shape amp。h (shapeamp。)。 //可以聲明抽象類的引用 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 從基類繼承來的純虛函數(shù),在派生類中仍是純虛函數(shù)。例如 : class ab_circle: public shape { int radius。 public: void rotate (int) { … } }。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 由于 shape: :draw( )是一個純虛函數(shù),缺省的ab_circle: :draw( )也是一個純虛函數(shù),這時 ab_circle仍為抽象類。要使 ab_circle類為非抽象的,必須如下說明: class ab_circle: public shape { int radius。 public: void rotate (int) { … } void draw( ) { } }。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 構造函數(shù)與虛析構函數(shù) 1. 構造函數(shù) 因為在派生類中構造函數(shù)是不能繼承的,也沒有重定義的必要。在構造函數(shù)中調(diào)用虛函數(shù)將破壞動態(tài)綁定邏輯。下面的例子說明了這樣動態(tài)綁定邏輯。 《 C++教程 》 清華大學出版社 多態(tài)性與虛函數(shù) 【 例 68】 include class base { protected: int x。 public: base (int m) { x=m+1。 print( )。 } virtual void print( )
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1