C 如何確定該呼叫基類的虛擬函式還是派生類的?

2023-03-08 15:35:06 字數 2319 閱讀 7716

1樓:網友

昨天貌似說錯了,如果是呼叫基類和派生類之間的虛擬函式,如果是直接通過物件來呼叫那就看是誰的物件,呼叫相應的虛擬函式就行了,如果是用指標或引用呼叫是根據指標本身來確定的(因為派生類是被看作基類的物件),就是說如果呼叫物件的指標或引用是被定義為基類型別的變數那麼就會呼叫基類的虛擬函式,反之則是呼叫派生類的,當然這必須是基類和派生類都定義了這個虛擬函式,昨天說的「這得看你的指標所指向的物件是基類物件還是派生類物件,根據物件的不同呼叫對應的虛擬函式 」這是在派生類之間才這樣決定的(用基類的指標或引用呼叫派生類的物件時依據此原則)

2樓:橫空世

如果虛擬函式的話,區別在於引用和指標,是屬於動態聯編過程,因為基類的引用或是指標可以指向派生類,所以虛擬函式的作用在於,呼叫的是實際指向的物件的虛擬函式,至於內在原理,就是在每個類中都有一個virtual function table 記錄著類中的虛擬函式的地址,如果派生類中有新的虛擬函式那麼vtbl中就會將舊的替換成新的,執行過程中,就會追蹤這個指標,然後,呼叫相應的虛擬函式。

3樓:楓起了

首先,虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式,所以,你可以根據指標來判斷的,可以看看書上具體的**來幫助你理解。

4樓:網友

取決於呼叫此函式的指標或者物件,是基類還是派生類。

基類中宣告瞭虛擬函式後,派生類中對應的函式也必須宣告為虛擬函式    沒有虛擬函式,一定不能實現動態繫結的

5樓:匿名使用者

前面那句錯了,派生類不必再宣告成虛擬函式了,只要基類宣告就可以。

基類宣告虛擬函式後,會建一張虛擬函式表。

c++虛基類

6樓:匿名使用者

虛基類是相對於它的派生類而言的,它本身可以是一個普通的類。

只有它的派生類虛繼承它的時候,它才稱作虛基類,如果沒有虛繼承的話,就稱為基類。比如類b虛繼承於類a,那類a就稱作類b的虛基類,如果沒有虛繼承,那類b就只是類a的基類。

虛繼承主要用於一個類繼承多個類的情況,避免重複繼承同一個類兩次或多次。

例如 由類a派生類b和類c,類d又同時繼承類b和類c,這時候類d就要用虛繼承的方式避免重複繼承類a兩次。

7樓:匿名使用者

問題?如果你不知道什麼是虛基類,請wikipedia

如果你對虛基類有問題,請提問。

c++中 抽象類和虛基類用途上有什麼區別

8樓:金色潛鳥

語法上有抽象類和虛基類,不等於你一定要用它。花裡胡哨的東西,我通常不用。

我能想到的抽象類用處,大概這個優點可以用一用:

含有純虛擬函式的類都是抽象類。基類中實際上並不使用這個函式,它只是通知編譯系統:

在這裡宣告一個虛擬函式,留待在派生類中定義。為一個類族提供一個公共介面。

例如,計算平面形狀的面積,抽象類 基類中 virtual float area( )const =0;

派生類三角形,派生類圓 各自定義了 area( )具體的計算。一旦有了派生的三角形或圓,我們可以用同樣的函式名。area( )計算面積。

虛基類,它的構建要在派生類裡做,而且先於派生類自己的構建。當有派生類1,派生類2,生成的派生類12時,派生類12只執行一次虛基類的構建。虛基類的物件只有唯一一個。

至於它有什麼特殊用途,沒想到。

派生類如果繼承了抽象基類中的純虛擬函式,而在該派生類中沒有對此純虛擬函式進行定義 ......

9樓:

這應該是筆誤吧,如果派生類中沒有對基類的純虛擬函式進行定義,那麼派生類自身也就成了一個抽象類,無法被例項化。如果也沒有進行宣告,那繼承下來的函式還是純虛擬函式。因為它明確地告訴了編譯器函式有操作名稱,但是指向無效地址。

如果在派生類中對基類的純虛擬函式進行了重新宣告或者定義,那麼此函式的操作指標就被指到了新的地址,如果這個新的操作地址沒有被指向0,那就不再是一個純虛擬函式,派生類也就不再是抽象類。

含有純虛擬函式的類是不可以用來建立物件的,因為它是虛基類

10樓:匿名使用者

這得分清楚含有純虛擬函式的類與虛基類是兩個不同的概念。

(1)含有純虛擬函式的類是不能建立物件。

(2)虛基類是指在繼承的時候,通過虛繼承的方式,繼承的基類。

含有純虛擬函式的類在繼承的時候,可以不加virtual關鍵字,因此可以不是虛基類。

只要在繼承的時候,加了virtual關鍵字,都是虛基類,這與基類中是否有純虛擬函式無關。

C基類怎麼呼叫派生類成員,C 的基類如何訪問其派生類的成員變數?

很簡單,在基類來中定義虛函源數,例如函bai數原型為 virtual void printinfo 在類 undergraduate 及 graduate 在 printinfo 中分別du輸出各自zhi 資訊即可。這時dao呼叫基類的 printinfo 函式就可輸出派生類資訊 只需在基類中定ba...

c類庫怎麼用,C中怎麼呼叫自己的類庫

你要先引入你寫的類庫啊,如,你的類庫叫dbclass,那你就應該先using dbclass引入,引入之後,再class1 a new class1 class1就會變藍的 c 中怎麼呼叫自己的類庫 部署dll流程 首先把dll檔案放到應用程式.bin debug 下 1先把類庫編繹成dll 2然後...

C無法呼叫C 編的DLL,C 中如何呼叫DLL檔案?

就跟你說一下吧來,你源 這種是缺少dll依賴的mainifest導致的 為什bai麼你安裝了vcredist還不行du,這是zhi因為從vc2005 vc2008,crt和mfc庫都有好幾dao個版本,你們開發用的版本跟你安裝的vcredist是不同的版本 那怎麼解決這個問題,很簡單,從你的開發機器...