在某基類中申明為virtual的成員函式,並在乙個或多個派生類中被重新定義,通過指向派生類的指標或引用,訪問派生類中同名覆蓋的成員函式。簡單的說:那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性
面試1:除了指標能引起多型,還有什麼能引起多型?
這是面試的時候常問題目,引起多型方式有兩種 :指標和引用
面試2:過載,重寫,覆蓋
過載這裡就不講了。 注意不同面試官會有不同叫法,其實重寫就是覆蓋,覆蓋就是重寫
虛函式的格式:
virtual void fun(int a)
下面舉個虛函式實現多型的例子:
class a
這裡輸出的結果就是this is a和this is b了。
上面輸出的結果就是多型產生的
多型實現的機制:
由於這兩個類中有虛函式存在,所以編譯器就會為他們兩個分別插入一段你不知道的資料,並為他們分別建立乙個表。那段資料叫做vptr指標(虛函式指標),指向那個表。那個表叫做vtbl(虛函式表),每個類都有自己的vtbl,vtbl的作用就是儲存自己類中虛函式的位址,我們可以把vtbl形象地看成乙個陣列,這個陣列的每個元素存放的就是虛函式的位址,
首先是取出vptr的值,這個值就是vtbl的位址,再根據這個值來到vtbl這裡,由於呼叫的函式a::fun()是第乙個虛函式,所以取出vtbl中第乙個值即為第乙個虛函式的位址,這個值就是a::fun()的位址了,最後呼叫這個函式。現在我們可以看出來了,只要vptr不同,指向的vtbl就不同,而不同的vtbl裡裝著對應類的虛函式位址,所以這樣虛函式就可以完成它的任務。
虛函式的作用
虛函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。例 基類與派生類中有同名函式。在下面的程式中student是基類,graduate是派生類,它們都有display這個同名的函式。include include using namespa...
虛函式的作用
虛函式的作用是實現動態聯編,也就是在程式的執行階段動態地選擇合適的成員函式,在定義了虛函式後,可以在基類的派生類中對虛函式重新定義,在派生類中重新定義的函式應與虛函式具有相同的形參個數和形參型別。以實現統一的介面,不同定義過程。如果在派生類中沒有對虛函式重新定義,則它繼承其基類的虛函式。當程式發現虛...
虛函式的作用
虛函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。例 基類與派生類中有同名函式。在下面的程式中student是基類,graduate是派生類,它們都有display這個同名的函式。include include using namespa...