在類的定義中,前面有 virtual 關鍵字的成員函式就是虛函式。
class
base
;int base::
get(
)virtual 關鍵字只用在類定義裡的函式宣告中,寫函式體時不用
一、
1、派生類的指標可以賦給基類指標。
2、通過基類指標呼叫基類和派生類中的同名虛函式時:
(1)若該指標指向乙個基類的物件,那麼被呼叫是基類的虛函式;
(2)若該指標指向乙個派生類的物件,那麼被呼叫的是派生類的虛函式。
這種機制就叫做「多型」。
class
cbase};
class
cderived
:public cbase };
intmain()
二、
1、派生類的物件可以賦給基類引用
2、通過基類引用呼叫基類和派生類中的同名虛函式時:
(1)若該引用引用的是乙個基類的物件,那麼被呼叫是基類的虛函式;
(2)若該引用引用的是乙個派生類的物件,那麼被呼叫的是派生類的虛函式。
這種機制也叫做「多型」。
classa}
;classb:
public a };
classd:
public a };
classe:
public b };
intmain()
多型的作用:
在物件導向的程式設計中使用多型,能夠增強程式的可擴充性,即程式需要修改或增加功能的時候,需要改動和增加的**較少。
class
base
/* void fun1()
this是基類指標,fun2是虛函式,所以是多型
*/virtual
void
fun2()
};class
derived
:public base };
intmain()
// pbase呼叫函式後,this指標指向派生類所以呼叫派生類的fun2()函式
輸出: derived:
fun2
()
在非建構函式,非析構函式的成員函式中呼叫虛函式,是多型!!!
class
myclass
;virtual
void
bye()}
;class
son:
public myclass
;son()
;~son();
};class
grandson
:public son
;void
bye(
)grandson()
;~grandson()
;};int
main()
/*程式結束時,物件消亡,先執行grandson的析構函式,再執行son的析構函式,
應呼叫son的bye(),但其沒有bye()函式,
但它從基類myclass繼承了乙個bye()函式,因此呼叫myclass的bye()函式
*/輸出:
hello from son
constructing grandson
hello from grandson
destructing grandson
bye from myclass
class
base};
class
derived
:public base };
derived d;
base * pbase =
& d;
pbase -
>
fun2()
;// 編譯出錯
通過基類的指標刪除派生類物件時,通常情況下只呼叫基類的析構函式
一般來說,乙個類如果定義了虛函式,則應該將析構函式也定義成虛函式。或者,乙個類打算作為基類使用,也應該將析構函式定義成虛函式。
純虛函式: 沒有函式體的虛函式
classa}
;
包含純虛函式的類叫抽象類
aa;
//錯,a是抽象類,不能建立物件a*
pa;//
ok,可以定義抽象類的指標和引用pa=
newa;/
/錯誤,a
是抽象類,不能建立物件
classa/*
a( )
*/};
classb:
public a};
intmain()
輸出:b:f(
)
中國大學MOOC 學習筆記(三)
在學習了嵩天老師的 python網路爬蟲與資訊提取課程 之後,我自己嘗試按照老師的步驟做了乙個小demo。url 如下 import requests from bs4 import beautifulsoup 獲得response物件 defgeturltext url r requests.ge...
畢博與中國大學mooc對比
本組選擇的測試產品a為畢博平台,產品b為中國大學慕課。專案進度表如下 我們小組劃分的功能模組如下 討論版的使用 提交作業與檢視作業 通知與搜尋 我負責的模組為討論版的使用 a.測試用例的設計思路 測試用例選擇的設計思路如下表的關鍵字列所示 請點這裡開啟匯出的測試用例 b.執行介面截圖 畢博對字型的測...
中國大學MOOC 學習筆記(一)
注 本文僅是個人的學習筆記,內容 於中國大學mooc python網路爬蟲與資訊提取 課程 一 京東商品頁面爬取 import requests url try r requests.get url r.raise for status 檢查訪問資訊的狀態碼,200表示正確 將編碼改為可以顯示的編碼...