引入原因:為了方便使用多型特性,我們常常需要在基類中定義虛函式。
class cman
;void move();
private:
};class cchild : public cman
;private:
};cman m_man;
cchild m_child;
cman *p ;
//虛函式的使用精髓,如果不定義基類的指標去使用,虛函式就沒有太大的意義,
//因為虛函式的實現是通過基類的指標指向派生類來實現的虛函式
p = &m_man ;
p->eat(); //始終呼叫cman的eat成員函式,不會呼叫 cchild 的
p = &m_child;
p->eat(); //如果子類實現(覆蓋)了該方法,則始終呼叫cchild的eat函式
//不會呼叫cman 的 eat 方法;如果子類沒有實現該函式,則呼叫cman的eat函式
p->move(); //子類中沒有該成員函式,所以呼叫的是基類中的
有人可能會想,定義虛函式又什麼用啊?其實很有用,比如你想描述一些事物的屬性給別人,而自己不想去實現,就可以定義虛函式,比如蓋樓房,你是老闆,你給建築公司描述清楚樓房特性,多少層,建築公司就可以按照你的方法去實現。
C 之虛函式
若乙個例項方法宣告前帶有virtual關鍵字,那麼這個方法就是虛方法。虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的 以後再講 虛方法的特點 虛方法前不允許有static,abstract,或override修飾符 虛方法不能是私有的,因此不能使用pri...
c 之虛函式
靜態聯編也叫做早繫結,函式名與其在記憶體中的可執行 之間的對應關係在編譯時就已經確定了 動態聯編也叫做晚繫結,是之成員函式的呼叫語句在編譯時不知道要執行哪個記憶體位址的 成員函式的呼叫會根據目標物件的動態型別在程式執行時將函式名繫結到具體的函式上 靜態聯編舉例 class shape 執行上面的 後...
C 之虛函式
虛函式的實質和用途 如果不定義虛函式,基類和擴充套件類中不能有同名函式 名字,引數個數順序型別都相同 否則會發生同名覆蓋,此時想用基類指標去呼叫擴充套件類的物件是行不通的 但如果將基類的成員函式定時成虛函式,相當於允許擴充套件類中重新定義該同名函式執行不同的功能,此時就可以用基類的指標去指向擴充套件...