c 中虛函式和多型性的問題

2021-06-22 04:33:04 字數 1325 閱讀 3778

我的疑問:

網友的解答:

解答一:

拿動物為父類,定義乙個走動的函式,魚是游泳,鳥是飛....父類無法具體實現或者說不知道實現哪乙個,將方法virtual後,就沒有具體實現,讓子類自己實現

解答二:

虛函式是在基類中定義的,目的是不確定它的派生類的具體行為。例:

定義乙個基類:class animal//動物。它的函式為breathe()//呼吸。

再定義乙個類class fish//魚 。它的函式也為breathe()

再定義乙個類class sheep //羊。它的函式也為breathe()

為了簡化**,將fish,sheep定義成基類animal的派生類。

然而fish與sheep的breathe不一樣,乙個是在水中通過水來呼吸,乙個是直接呼吸空氣。所以基類不能確定該如何定義breathe,所以在基類中只定義了乙個virtual breathe,它是乙個空的虛函式。具本的函式在子類中分別定義。程式一般執行時,找到類,如果它有基類,再找它的基類,最後執行的是基類中的函式,這時,它在基類中找到的是virtual標識的函式,它就會再回到子類中找同名函式。派生類也叫子類。基類也叫父類。這就是虛函式的產生,和類的多型性(breathe)的體現.

這裡的多型性是指類的多型性。

解答三:

虛函式聯絡到多型,多型聯絡到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麼都沒得談。 

下面是對c++的虛函式這玩意兒的理解。 

什麼是虛函式(如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始) 

簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性(polymorphism),多型性是將介面與實現進行分離;用形象的語言來解釋就是實現以共同的方法,但因個體差異而採用不同的策略。下面來看一段簡單的** 

class a

通過class a和class b的print()這個介面,可以看出這兩個class因個體的差異而採用了不同的策略,輸出的結果也是我們預料中的,分別是this is a和this is b。但這是否真正做到了多型性呢?no,多型還有個關鍵之處就是一切用指向基類的指標或引用來操作物件。那現在就把main()處的**改一改。 

int main() 

執行一下看看結果,喲呵,驀然回首,結果卻是兩個this is a。問題來了,p2明明指向的是class b的物件但卻是呼叫的class a的print()函式,這不是我們所期望的結果,那麼解決這個問題就需要用到虛函式 

class a{ 

public: 

virtual void print(){ cout<<」this is a」<

C 多型性和虛函式

c 的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同 舉個例子,比如 移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動 這就是多型性 多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享 還能共享介面。非靜態函式宣告的前面加上v...

C 虛函式和多型性

c 為了實現多型性,提供了靜態繫結 早 或者叫做編譯期繫結 和動態繫結 晚 兩種機制。靜態繫結中包括 1 函式過載 2 運算子過載 3 子類繼承父類時,父類中的函式沒有新增virtual關鍵字 非虛函式 父類指標指向子類的位址時,呼叫和父類同名的函式則會預設呼叫父類的同名函式,子類同名函式的不會被呼...

c 多型性 虛函式

c 中多型性是指通過用virtual關鍵字來繫結同名同引數的函式,實現在編譯中進行後繫結,即在編譯過程中不繫結類,在執行時與具體的物件進行繫結,這樣就可以動態地與實際聯絡 比如乙個類 animal 有乙個虛函式breath 魚類 fish 也有函式breath 狗類 dog 函式breath 具體呼...