C虛方法的作用,c 中,虛方法的特點是什麼?

時間 2021-06-30 22:18:12

1樓:匿名使用者

他的子類可以重寫也可以不重寫,實現多型

c#中的虛方法究竟有什麼用了

2樓:匿名使用者

這個區別可就大了。

從類這種機制看,你覆蓋是把東西換了,對於這個類來說,以前的方法不存在了。重寫是你在這個類的虛擬函式表(不清楚自己查下)裡增加了一項,並沒有覆蓋,是一種動態性的調整。例子,類a和類b的繼承關係是類b繼承類a,然後有一個函式func。

假如func是普通函式,類b覆蓋了,那麼把一個類b的例項轉換為類a時,你呼叫這個func仍然是覆蓋後的函式,如果是虛擬函式,得到的確實類a的func。

這兩個東西或許你從感覺覺得區別不大,但是這兩個有根本性區別,虛擬函式實現了一個函式一對多的關係,可以通過同個名字但是不同地址(型別轉換,c++裡的指標等)去操作不同的函式,這種特性用覆蓋是實現不了的,因為普通函式編譯的時候已經確定了呼叫的位置,而虛擬函式的呼叫是執行時才確定的(函式地址)。

在c#中定義一個虛方法需要使用的關鍵字是?

3樓:匿名使用者

子類可以對父類中的虛方法進行重寫,虛方法是多型特性的一種體現c#中的虛方法使用virtual關鍵字定義public virtual void eat();

override關鍵字作用是對父類的virtual方法進行重寫public override void eat();

**舉例:

using system;

using system.collections;

public class animal

public virtual void eat()}public class dog:animal}public class cat:animal}public class panda:

animal}public class mainfun}

4樓:幻雪靈烽

class test

在實現初過載就可以了

public new void testshow()

c#中,虛方法的特點是什麼?

5樓:仙戈雅

從oop思想出發:虛方法是允許派生類(即其子類)對父類進行擴充套件.比如原父類的某個虛方法不能滿足你的需求時,那麼此時可以對它進行擴充套件(也稱為重寫)。

c#虛方法和非虛方法的區別

6樓:匿名使用者

結果:a.f b.f b.g b.g

虛方法允許子類重寫,非虛方法就不是重寫了,需要定義一個new來告訴編譯器我新定義了一個f方法。

a a = b;=> a a = b as a;

a.f()呼叫a的f b.f()調b的f;

a.g()和b.g()因為呼叫的為虛方法,執行時會判斷b有無重寫g 方法,重寫調b.g,沒重寫a,g

7樓:匿名使用者

虛方法需要加一個標識來重寫.

非虛方法需要加new來標識為覆蓋

8樓:

b繼承自a,所以可以用b來定義a。這個例子就是告訴你例項物件的方法是怎麼執行的。你寫的ffgg不完整,難怪你沒看懂。

a.f還是b.f是很關鍵的,這裡說明執行的是父類同名方法還是子類方法。

在c#中的虛方法,以下說法正確的是()

9樓:顧影自憐

bca是靜態方法

d使用了virtul後不能再使用static、abstract或override修飾符。

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

我愛你罁 純虛擬函式是在基類中宣告的虛擬函式,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成物件,可以使用指標或者引用派生類物件。基類不在基類中實現純虛擬函式的方法是在函式原型後加 0 virtual void funtion1 0 1 為了方便使用多型特性,我們常常需要在基類...

關於c中虛擬函式的問題

然後去遠足 1 題主犯了很低階的錯誤 class1 cd new class1 b cd1 new b console.writeline cd.fuc 1 輸出的是 cd 物件的 fuc 方法,cd 物件是 class1 型別,結果是 1 是完全正確的。2 不 override 的這種寫法叫做 隱...

虛擬函式的定義,C 中虛擬函式必須有定義嗎?

赫連巧山 1.虛擬函式的定義 虛擬函式用來表現基類和派生類的成員函式之間的一種關係.虛擬函式的定義在基類中進行,在需要定義為虛擬函式的成員函式的宣告前冠以關鍵字 virtual.基類中的某個成員函式被宣告為虛擬函式後,此虛擬函式就可以在一個或多個派生類中被重新定義.在派生類中重新定義時,其函式原型,...