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...