c語言虛函數(shù)的用法 c語言 虛數(shù)

在C++中用虛函數(shù)的作用是什么?為什么要用到虛函數(shù)

虛函數(shù):在某基類中聲明為 virtual 并在一個或多個派生類中被重新定 義的成員函數(shù),用法格式為:virtual 函數(shù)返回類型 函數(shù)名(參數(shù)表) {函數(shù)體};實現(xiàn)多態(tài)性,通過指向派生類的基類指針或引用,訪問派生類中同名覆蓋成員函數(shù)。

成都創(chuàng)新互聯(lián)主營城關(guān)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),城關(guān)h5小程序開發(fā)搭建,城關(guān)網(wǎng)站營銷推廣歡迎城關(guān)等地區(qū)企業(yè)咨詢

眾所周知,在同一類中是不能定義兩個名字相同、參數(shù)個數(shù)和類型都相同的函數(shù)的,否則就是“重復(fù)定義”。但是在類的繼承層次結(jié)構(gòu)中,在不同的層次中可以出現(xiàn)名字相同、參數(shù)個數(shù)和類型都相同而功能不同的函數(shù)。例如在例12.1(具體代碼請查看:C++多態(tài)性的一個典型例子)

程序中,在Circle類中定義了

area函數(shù),在Circle類的派生類Cylinder中也定義了一個area函數(shù)。這兩個函數(shù)不僅名字相同,而且參數(shù)個數(shù)相同(均為0),但功能不

同,函數(shù)體是不同的。前者的作用是求圓面積,后者的作用是求圓柱體的表面積。這是合法的,因為它們不在同一個類中。

編譯系統(tǒng)按照同名覆蓋的原則決定調(diào)用的對象。在例12.1程序中用cy1.area( )

調(diào)用的是派生類Cylinder中的成員函數(shù)area。如果想調(diào)用cy1 中的直接基類Circle的area函數(shù),應(yīng)當(dāng)表示為

cy1.Circle::area()。用這種方法來區(qū)分兩個同名的函數(shù)。但是這樣做 很不方便。

人們提出這樣的設(shè)想,能否用同一個調(diào)用形式,既能調(diào)用派生類又能調(diào)用基類的同名函數(shù)。在程序中不是通過不同的對象名去調(diào)用不同派生層次中的同名函數(shù),而是通過指針調(diào)用它們。例如,用同一個語句“pt-display( );”可以調(diào)用不同派生層次中的display函數(shù),只需在調(diào)用前給指針變量 pt 賦以不同的值(使之指向不同的類對象)即可。

打個比方,你要去某一地方辦事,如果乘坐公交車,必須事先確定目的地,然后乘坐能夠到達(dá)目的地的公交車線路。如果改為乘出租車,就簡單多了,不必查行車路

線,因為出租車什么地方都能去,只要在上車后臨時告訴司機(jī)要到哪里即可。如果想訪問多個目的地,只要在到達(dá)一個目的地后再告訴司機(jī)下一個目的地即可,顯

然,“打的”要比乘公交車 方便。無論到什么地方去都可以乘同—輛出租車。這就是通過同一種形式能達(dá)到不同目的的例子。

C++中的虛函數(shù)就是用來解決這個問題的。虛函數(shù)的作用是允許在派生類中重新定義與基類同名的函數(shù),并且可以通過基類指針或引用來訪問基類和派生類中的同名函數(shù)。

C++中虛函數(shù)的作用是什么?它應(yīng)該怎么用呢?

C++中虛函數(shù)的作用:

1、為了方便使用多態(tài)特性,我們常常需要在基類中定義虛擬函數(shù)。

2、在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。

為了解決上述問題,引入了純虛函數(shù)的概念,將函數(shù)定義為純虛函數(shù)(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類中必須予以重寫以實現(xiàn)多態(tài)性。

同時含有純虛擬函數(shù)的類稱為抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。

C++中虛函數(shù)的用法:

比如你有個游戲,游戲里有個虛基類叫「怪物」,有純虛函數(shù) 「攻擊」。然后派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現(xiàn)了自己不同的「攻擊」函數(shù),比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。

然后出現(xiàn)好多怪物的時候就可以定義一個?虛基類指針數(shù)組,把各種怪物的指針給它,然后迭代循環(huán)的時候直接 monster[i]-attack() 攻擊玩家就行了,大概見下圖:

擴(kuò)展資料:

使用虛函數(shù)的注意事項:

一、包含虛函數(shù)的類指針列表會增大。

二、虛析構(gòu)函數(shù)

析構(gòu)函數(shù)的作用是在對象撤銷之前做必要的“清理現(xiàn)場”的工作。當(dāng)派生類的對象從內(nèi)存中撤銷的時候,會先先調(diào)用派生類的析構(gòu)函數(shù)然后再調(diào)用基類的析構(gòu)函數(shù)。

當(dāng)我們new一個臨時對象時,若基類中包含析構(gòu)函數(shù),并且定義了一個指向該基類的指針變量。

三、構(gòu)造函數(shù)不能聲明為虛函數(shù)

構(gòu)造函數(shù)不能聲明為虛函數(shù)。如果聲明為虛函數(shù),編譯器會自動報出。

四、不在析構(gòu)或者構(gòu)造過程中調(diào)用虛函數(shù)

在析構(gòu)函數(shù)或者是構(gòu)造函數(shù)中,我們絕對不能調(diào)用虛函數(shù)。即使,我們在構(gòu)造函數(shù)或者析構(gòu)函數(shù)中調(diào)用虛函數(shù),也不會下降至派生類中調(diào)用函數(shù)。

請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用。

析構(gòu)就是對象離開生存空間時執(zhí)行的,用來清理分配的空間之類.

虛函數(shù)的作用:假如有類A.類A派生出類B.

那么如果寫A* p = new B;時.就得到了一個指向類B的指針,這個指針的類型是A*

如果類A和類B中都有void Out()這么個函數(shù).p-Out()將調(diào)用A::Out()函數(shù)

而如果把類A中的改成虛函數(shù)virtual void Out().p-Out()就將調(diào)用B::Out()函數(shù).

就是這樣

下面抄幾段:

析構(gòu)函數(shù)是“反向”的構(gòu)造函數(shù)。它們在對象被撤消(回收)時調(diào)用。析構(gòu)函數(shù)的名 稱除了最前面的“~”符號外,與類的名稱相同。例如,類String的析構(gòu)函數(shù)是~string()。 析構(gòu)函數(shù)通常用于當(dāng)一個對象不再需要時,完成“消除”功能。

在函數(shù)中建立對象之后,這個對象作為局部對象開始生存,直到函數(shù)運行到遇見右括號“}”才結(jié)束生存,此時調(diào)用析構(gòu)函數(shù)。

對象的釋放發(fā)生在以下幾種情況,首發(fā)自學(xué)編程網(wǎng):

·使用運算符new分配的對象被delete刪除。

·一個具有塊作用域的本地(自動)對象超出其作用域。

·臨時對象的生存期結(jié)束。

·程序結(jié)束運行。

·使用完全限定名顯示調(diào)用對象的析構(gòu)函數(shù)。

有幾條規(guī)則約束著析構(gòu)函數(shù)的說明:

·不能接受參量。

· 不能說明有任何返回類型(包括void)。

·不能用return語句返回值。

· 不能說明為const、volatile或static,但析構(gòu)函數(shù)可以因說明為const、volatile或static的對象的析構(gòu)而被調(diào)用。

·可以說明為虛擬的。使用虛析構(gòu)函數(shù),可以撤消對象而不必知道該對象的類型。由于使用虛擬函數(shù)機(jī)制,程序?qū)⒄{(diào)用該對象的正確的析構(gòu)函數(shù)。

注意:在一個抽象類中,析構(gòu)函數(shù)可以說明為虛函數(shù)。我們會在后面詳細(xì)介紹虛函數(shù)的概念。

虛函數(shù)去這看吧

下面還有個虛析構(gòu)的

析構(gòu)函數(shù)和虛函數(shù)的用法和作用

置于“~”是析構(gòu)函數(shù);析構(gòu)函數(shù)因使用"~"符號(邏輯非運算符),表示它為膩構(gòu)造函數(shù),加上類名稱來定義。

;析構(gòu)函數(shù)也是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載,只有在類對象的生命期結(jié)束的時候,由系統(tǒng)自動調(diào)用。

有適放內(nèi)存空間的做用!

虛函數(shù)是C++多態(tài)的一種表現(xiàn)

例如:子類繼承了父類的一個函數(shù)(方法),而我們把父類的指針指向子類,則必須把父類的該函數(shù)(方法)設(shè)為virturl(虛函數(shù))。

使用虛函數(shù),我們可以靈活的進(jìn)行動態(tài)綁定,當(dāng)然是以一定的開銷為代價。

如果父類的函數(shù)(方法)根本沒有必要或者無法實現(xiàn),完全要依賴子類去實現(xiàn)的話,可以把此函數(shù)(方法)設(shè)為virturl

函數(shù)名=0

我們把這樣的函數(shù)(方法)稱為純虛函數(shù)。

如果一個類包含了純虛函數(shù),稱此類為抽象類

C語言中void DigDisplay()是什么意思?

您好,很高興回答您的問題。

由于沒有看到其他的內(nèi)容所以只能從結(jié)構(gòu)上來說明相關(guān)含義。

void digdisplay()表示的是這個函數(shù)的定義,其中void表示函數(shù)不帶任何的返回值,digdisplay表示的是函數(shù)名,括號中表示函數(shù)的參數(shù),這里是空的,所以表示不帶任何的返回值。

以上就是我的回答,敬請指正。

C語言問題虛函數(shù)的問題

虛函數(shù)的作用是可以通過基類的指針或者引用調(diào)到派生類的這個函數(shù)。

你上面的代碼是演示虛函數(shù)的作用,不用去簡便他。

你可以把這個程序中的virtual全部刪除掉,然后再運行程序,觀察一下兩次結(jié)果的不一樣,估計你就能理解虛函數(shù)的作用了。

標(biāo)題名稱:c語言虛函數(shù)的用法 c語言 虛數(shù)
當(dāng)前路徑:http://muchs.cn/article28/dosdpjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)