什麼是虛擬函式,C虛擬函式講解,是不是隻有虛擬函式才能定義為純虛擬函式,C語法。

2021-05-25 21:24:49 字數 2585 閱讀 3016

1樓:千鋒教育

在某基類中宣告為 virtual 並在一個或多個派生類中被重新定 義的成員函式,用法格式為:virtual 函式返回型別 函式名(參數列) ;實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。

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

虛擬函式的作用:用同一個呼叫形式,既能呼叫派生類又能呼叫基類的同名函式。

虛擬函式的使用方法是:

在基類用virtual宣告成員函式為虛擬函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。在類外定義虛擬函式時,不必再加virtual。

在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛擬函式相同,並根據派生類的需要重新定義函式體。c++規定,當一個成員函式被宣告為虛擬函式後,其派生類中的同名函式都自動成為虛擬函式。因此在派生類重新宣告該虛擬函式時,可以加virtual,也可以不加,但習慣上一般在每一層宣告該函式時都加virtual,使程式更加清晰。

如果在派生類中沒有對基類的虛擬函式重新定義,則派生類簡單地繼承其直接基類的虛擬函式。

定義一個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。

通過該指標變數呼叫此虛擬函式,此時呼叫的就是指標變數指向的物件的同名函式。通過虛擬函式與指向基類物件的指標變數的配合使用,就能方便地呼叫同一類族中不同類的同名函式,只要先用基類指標指向即可。如果指標不斷地指向同一類族中不同類的物件,就能不斷地呼叫這些物件中的同名函式。

這就如同前面說的,不斷地告訴計程車司機要去的目的地,然後司機把你送到你要去的地方。

c++中虛擬函式如何定義,使用時應該注意什麼?

2樓:千鋒教育

/*--

定義純虛擬函式介面:virtual void f()=0; //只是提供介面,實現留給繼承類

使用時應注意:子類必須要實現該函式

--*/

#include

using namespace std;

class a

;class b:public a

};void main()

3樓:

虛擬函式的定義要這樣,virtual 返回型別+函式名(引數);

虛擬函式呼叫時要注意,在類繼承的時候,子類呼叫的虛擬函式和父類中虛擬函式的區別

4樓:匿名使用者

虛擬函式在宣告時與一般函式的不同地方就是需要新增一個標誌符virtual,在定義時和普通函式相同。在呼叫時和一般函式的呼叫也是相同的,只不過要注意多型而已。

是不是隻有虛擬函式才能定義為純虛擬函式,c++語法。

5樓:千鋒教育

你概念有點混淆了,這個virtual void fun()=0; 是純虛擬函式;virtual void fun(); 是虛擬函式。它們是有區別的。有純虛擬函式的類一般都是虛基類,主要用於繼承,讓子類來實現虛擬函式。

虛擬函式的作用當然是多型了~~

class base

{public:

void base::fun() {cout<<"base"

return 0;

} 如果fun 是虛擬函式顯示什麼,不是虛擬函式顯示什麼?自己試試

c++什麼時候使用虛擬函式

6樓:育知同創教育

虛擬函式就是在基類中被關鍵字virtual說明,並在派生類中重新定義的函式。虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。

虛擬函式就是為了讓基類指標(或引用)能訪問派生類中定義的成員。

c++中 解構函式中可以呼叫虛擬函式麼

7樓:育知同創教育

c++中 析構

函式中不可以呼叫虛擬函式。

effective c++ 中有這樣的描述:同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c++ 就將它們視為不再存在。

c++中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類的解構函式再呼叫基類的建構函式。

假設一個派生類的物件進行析構,首先呼叫了派生類的析構,然後在呼叫基類的析構時,遇到了一個虛擬函式,這個時候有兩種選擇:plan a是編譯器呼叫這個虛擬函式的基類版本,那麼虛擬函式則失去了執行時呼叫正確版本的意義;plan b是編譯器呼叫這個虛擬函式的派生類版本,但是此時物件的派生類部分已經完成析構,「資料成員就被視為未定義的值」,這個函式呼叫會導致未知行為。

8樓:回頭的世界

很簡單,你定義一個虛擬函式,然後在解構函式中呼叫看看,debug除錯,能執行就證明可以!

自己動手比實踐,比問別人「記住」一些規則,更有效果!

9樓:徐霄沛

是可以的,不過,這樣呼叫沒有什麼意義,不能實現多型。

c什麼時候使用虛擬函式,什麼是虛擬函式,C虛擬函式講解

虛擬函式就是在基類中被關鍵字virtual說明,並在派生類中重新定義的函式。虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。虛擬函式就是為了讓基類指標 或引用 能訪問派生類中定義的成員。什麼是虛擬函式,c 虛擬函式講解 在某基類中宣告...

c 什麼是虛擬函式,構造與解構函式可以是虛擬函式嗎

虛擬函式用於實現類的繼承所體現的多型性,當一個類的成員函式被宣告為虛的,那麼這個類的派生類如果過載了這個函式,那麼在呼叫這個函式時,會先確認這個類例項是原來的類還是派生類 因為父類的指標可以指向子類 如果是父類,那麼呼叫父類的版本,如果是子類,則呼叫對應的子類的版本。class a class b ...

c純虛擬函式,C 中純虛擬函式有什麼作用

純虛擬函式就是抽象類函式。宣告是virtual void fn 0 沒有實現體的函式。補充一點,含有純虛擬函式的類是抽象類 純虛擬函式是一種特du殊的虛函zhi數,它的一般格式dao如下 專class 類名 屬 在許多情況下,在基類中不能對虛擬函式給出有意義有實現,而把它說明為純虛擬函式,它的實現留...