學習C 類的例項化 和方法的問題

2021-04-02 20:07:57 字數 888 閱讀 3345

using system;

using system.collections.generic;

using system.text;

答案---------->>

a a = b;這個嗎就是    基類物件引用子類的物件

結果應該是:

a.fb.f

a.gb.g

如果是你們書上的這種結果:應該把子類的

public virtual void g()

修改為public override void g()

就是你們書上這種結果了

方法的覆蓋:指派生類覆蓋基類的同名方法,有二種方法

1:第一種是在派生類要覆蓋的方法前面加new修飾,而基類不需要作任何改動。

這種方法的缺點是不能實現多型。例:

class a

}class b: a   //從基類繼承

}class testclass

2:第二種是在派生類要覆蓋的方法前面加override修飾,而基類的同名方法前面加virtual修飾。

這樣就能實現多型,例:

class a

}class b: a     //從基類繼承

}class testclass

}說明:new修飾的方法覆蓋不能實現多型的原因,是因為使用new時編譯器只會實現早期繫結(early binding)。

即呼叫的方法在編譯時就決定了:編譯器看到instance.method()而instance的類是a,就會呼叫類a的method()方法。

override修飾的方法覆蓋可以實現多型的原因,是因為實現了後期繫結(late binding)。使用override時強制編譯器在執行時根據類的真正型別正確呼叫相應的方法,而不是在編譯時。而基類的同名方法必須加virtual修飾。

C 類的例項化方法

例項化 是指建立一個物件的過程 c 中類的例項化有兩種方式 在棧中例項化和在堆中例項化 在棧中例項化為靜態分配記憶體,不需要手動 超出記憶體系統報錯。例如 student a或者student a 3 使用 操作符,宣告即呼叫了建構函式 已分配了記憶體 在堆中例項化為動態分配記憶體,需要使用dele...

Python的類方法 靜態方法和例項化方法

coding utf 8 class a def init self,name self.name name staticmethod defstaticfun print this is static function classmethod defclassfun cls print this ...

php 未例項化類呼叫方法的問題

雙冒號操作符其意義應該是不例項化類而呼叫類中的方法或者成員等 class man1 由於show方法中沒有this,所以不出錯 man1 show class man2 由於show方法中沒有this,所以不出錯 man2 show class man3 這種是犯錯的,static 方法裡面不可以用...

C 類的兩種例項化方法

直接上 include include include using namespace std class student student student int age,string name void student show int age,string name void student s...

c 靜態方法和例項方法的記憶體分配問題

一直對例項方法的記憶體如何分配有很大疑惑 通俗的講就是例項方法在記憶體中有幾份 找了很多資料,以下是一個比較令我滿意的答案,記錄下 當呼叫靜態方法時,clr 會根據方法呼叫去尋找其對應的 type object,然後,把方法 jit,jit 之後的方法是本機 可以直接執行,然後,這部分 被載入進入記...