1樓:匿名使用者
首先你要稍微有點繼承和多型的概念。
虛擬函式是實現多型的基礎,舉個最俗的例子:
比如你有一個要實現畫圖的程式,需要畫線、圓、方塊等等,每種圖形不止一個,那麼這些類都有一個函式叫做draw()。
如果沒有多型的概念,那麼這些圖形就要儲存不同的集合裡,比如這裡在繪製邏輯裡需要一個list一個list一個list,然後每次繪製的時候分別去遍歷他們。這裡勢必會造成資源的浪費,以及難以擴充套件:比如我再加一個三角形,一個橢圓都要修改繪製邏輯。
如果引入多型的概念,那麼這些圖形可以繼承自一個類比如說shape,而他有個draw函式,那麼所有繼承自shape的物件都可以向上轉型到shape,繪製邏輯就可以只維護一個list<*shape>。
有了這個背景,接下來是你的問題。
虛擬函式:
那麼問題是怎麼保證轉型到shape的物件呼叫的draw函式是他們原來自己的draw函式呢?c++用虛擬函式宣告這個函式可以被子類過載。shape的draw函式如果不宣告為virtual,那麼對list<*shape>裡面的每一個物件呼叫的時候都是使用的shape的draw函式,這不是我們想看到的。
所以如果這個函式需要被子類(線啊圓啊這些類)覆蓋,那麼請使用virtual關鍵字。
純虛擬函式和抽象類:
上面有兄弟提到了,virtual void draw() = 0;這樣沒有函式體的函式是純虛擬函式,也就是說這個類的功能還不完整,那麼他就不能被例項化,就是不能new。那麼在我們的例子裡shape本身是沒有意義的,他只是為子類提供一個可重寫的方法,那麼這個shape類是不應該被例項化的,這個類的draw函式也不應該被實現(他不需要draw他也不知道自己該怎麼draw),draw這個方法可以定義為純虛擬函式,這個類自然就是抽象類了。
囉嗦了點額。。舉個例子比較容易理解。。
2樓:美麗生靈
虛擬函式必須要在繼承關係的類中才能體現出價值,在基類中如果用virtual修飾的函式,那麼在這個基類的派生類中重寫這個函式,則使用基類的指標指向派生型別時,呼叫的這個函式就是派生類自己定義的函式,舉例說明下:
class base
這時雖然p的型別是base型別的指標,但是指向的是一個base的派生類物件,那麼用這個指標呼叫虛擬函式時,就會體現c++的多型特性,實際呼叫的是child的show函式。
純虛擬函式就是當定義一個虛擬函式時,給它賦0,像上面那個這樣,virtual void show()= 0;這樣的話表示這個虛擬函式只能由派生類來實現,所以此時在主函式中寫base b();就會出現編譯錯誤,因為show函式在base類中不能被實現,當然也就不能定義base型別了
抽象類就是帶有純虛擬函式的類
3樓:匿名使用者
虛擬函式:就是指定義時加了個virtul 修飾,編繹是不存在的,主要是為了給他的孩子用的(就像你從你爸繼承到的錢一樣,可以給你用,但是並無法使來吃、喝、玩,只能通過間接的手段來獲得)如給孩子繼承後由孩子來決定如何使用,所以用起來更靈活(如你爸把給你的錢買了某樣東西,你就無法更改其功能了,但是給你錢就可以買你想要的東西)----注意,虛擬函式裡面可以有一定功能
純虛擬函式就是純屬什麼都沒有,就只是個名字罷了
如果類至少有一個純虛擬函式,則這個類就是抽象的 功能如虛擬函式說的,給孩子繼承用的
4樓:
樓上將的太麻煩了!
我用自己的話說一次吧
1:虛擬函式
虛擬函式是可以被子類重寫的函式.
virtual void testfun1();
2:純虛擬函式
純虛擬函式是一定要被子類實現的函式.
virtual void testfun1() = 0;
3:抽象類
有純虛擬函式的類叫抽象類,抽象類不能直接例項化,必須要被繼承並實現純虛擬函式後才能使用.
class ca;
有哪位朋友認識這種植物的幫忙講解下
地方不同叫 bai法也不同 在我們這裡一般就du叫 吊蘭zhi 是吊蘭種類的一種 有的叫dao吊竹內梅 也有叫吊竹 很多叫法容 都是一些老品種的花類 所以真名也查不清楚 這種植物 垂吊生長看起來跟未修剪的頭髮一樣 若不修剪可生長 長達數米 繁殖一般用剪刀 剪下一枝泡在水中 一段時間就會生根 生根後埋...
請懂夢的人士幫忙講解下 謝謝 夢到佛
孫悟空和唐僧 西天取經的故事說明了什麼 說明要歷盡艱險 降妖除魔 經99 81難才能成就 你前方是佛,後方是觀音 表示前途美好 無後顧之憂 但需要個人的勤奮努力 執著 堅強才行 讓我不太敢看,害怕看他,所以我就低下頭眼神迴避地向後看了下 預示不能迴避前進路上的困難和阻礙 要敢於面對 定會成功 預示你...
幾個關於聚氨酯的問題高分懸賞大家幫幫忙
聚氨酯硬泡最好粉碎後,加在b料中回用。硬泡的阻燃有國家標準 高分懸賞!計算機基礎問題,大家幫幫忙啊,急急急!謝謝啊!100 1 bbs 2 錯誤 3 正確 4 錯誤 5 正確 6 第三個 7 正確 8 內第三個 9 資料鏈路層容 和物理層 10 c類 11 b類12 32位13 正確 14 錯誤 1...