關於c中虛擬函式的問題

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

1樓:然後去遠足

1、題主犯了很低階的錯誤:

class1 cd = new class1();

b cd1 = new b();

console.writeline(cd.fuc(1));

輸出的是 cd 物件的 fuc() 方法,cd 物件是 class1 型別,結果是 1 是完全正確的。

2、不 override 的這種寫法叫做「隱藏」,但是標準寫法是前面新增 new 關鍵字:

public class class1

}public class b : class1}3、題主朋友說的是抽象類,也即 abstract 關鍵字修飾的型別。

2樓:匿名使用者

虛擬函式,為什麼不要定義任何內容呢?

他是指在某些情況下複寫的.

你朋友說的本身就是錯誤的...

他說的是抽象函式吧....

你的理解差不多是正確的.

第二個將override和virtual刪去,理論上父類子類同時定義一個函式,程式設計會報錯,但是並沒有,在執行console.writeline(cd1.fuc(1));的時候,輸出結果為:

2也就是說,並沒有使用virtual和override就實現了虛擬函式的功能,這又是怎麼回事?

沒有吧...這個本身也是正常情況..

因為你就是執行b裡面的fuc而已...

跟虛擬函式不虛擬函式也沒啥關係..

另外..虛擬函式是標註該函式可以被重寫而已....

virtual 關鍵字用於修飾方法、屬性、索引器或事件宣告,並且允許在派生類中重寫這些物件。例如,此方法可被任何繼承它的類重寫。

這個才是真實定義... 你這裡理解是錯誤的哦..

但是如果這樣的話,這個虛擬函式還有定義的必要嗎?因為每個子類都是需要重寫寫自己的方法的,並沒有體現繼承的降低複用性的特點。

希望大神們解決這三個問題!

理解完畢第一個回答.再來看你的理解吧..

虛擬函式..僅僅是為了修飾方法屬性或索引可以被派生類重寫..

與此相似的還有new..可以去看看定義

與此相同還有在建構函式寫

public xx():base

這樣的..

都去看看...

3樓:匿名使用者

首先,你的朋友的說法是錯的,哪種方式說的是抽象方法。

其次,「我以為虛擬函式等於沒寫,寫什麼都一樣」,這也是錯誤的,虛擬函式沒有被重寫,自己是有效的;

最後,「將override和virtual刪去,理論上父類子類同時定義一個函式,程式設計會報錯,但是並沒有

」,這個問題確實不會報錯,但是編譯會警告,其實是省略了new。

順便,建議你看下virtual和new的區別,就知道什麼是virtual了。

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

4樓:顧影自憐

bca是靜態方法

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

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

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

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

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

c中建構函式與解構函式的問題,C 中建構函式與解構函式的問題

你的getname函式在 你的類定義中只有getscore和getid c 關於建構函式和解構函式呼叫次數的問題 沒問題啊。引數傳遞的時候第一次拷貝構造呼叫,在函式返回的時候賦值給c2 再次呼叫了拷貝構造。析構的話 c1 c2 c 三次 傳遞引數和返回引數各一次拷貝建構函式,所以是2次 有兩個物件c...