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修飾符。

虛擬函式virtual的作用,C 中虛擬函式的作用是什麼?它應該怎麼用呢?

文件類共創空間 虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。例 基類與派生類中有同名函式。在下面的程式中student是基類,graduate是派生類,它們都有display這個同名的函式。include include usin...

c 中什麼是虛函式?空虛函式有什麼作用?可以宣告抽象類的對

簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進行分離 用形象的語言來解釋就是實現以共同的方法,但因個體差異而採用不同的策略。下面來看一段簡單的 class a 執行一下看看結果,喲呵,驀然...

C 中,虛基類是如何避免兩義性的

c 的繼承中的基類就是派生類的一個子物件,也就是說基類是派生類的一個子部分,它佔用派生類的一部分記憶體。當b類從a類派生時,b類物件中就會有sizeof a 大小的儲存空間用於儲存a類子物件。當通過b類物件來訪問a類的成員時,產生的訪問指令使用的地址是b物件的起始地址 a物件在b物件的偏移量 a成員...