C 繼承知識詳解

2021-06-12 20:17:27 字數 1600 閱讀 5129

c#的繼承與 c++ 等語言乙個重要的不同,就是只能從乙個類中繼承,這是開發者

在權衡了從多個類c#繼承的優勢與劣勢作出的結果。不過,可以從介面繼承。另外,繼承可傳遞。建構函式和析構函式不能被繼承。

初始化基類

可以在派生類建構函式中新增初始化基類的**。

public

class baseclass  

}  public

class derivedclass : baseclass  

注意派生類建構函式中的 : base(index)。將先呼叫基類的建構函式。

另外,相對於 this,要訪問基類的成員,可以使用 base,當前這不能用在靜態方法中,因為靜態方法沒有例項。

c#繼承中的重寫

◆virtual 用在基類中,指定乙個虛方法(屬性),表示這個方法(屬性)可以重寫。

◆override 用在派生類中,表示對基類虛方法(屬性)的重寫。

以上的基類和派生類都是相對的。b 是 c 的基類,也可以是 a 的派生類,b 中既可以對 a 中的 virtual 虛方法用 override 重寫,也可以指定 virtual 虛方法供 c 重寫。

不能重寫非虛方法或靜態方法。重寫的基方法必須是 virtual、abstract 或 override 的。為什麼 override 也可以重寫呢?因為基類中的 override 實際上是對基類的基類進行的重寫,由於繼承可傳遞,所以也可以對基類中 override 的方法進行重寫。

◆override 宣告不能更改 virtual 方法的可訪問性。override 方法和 virtual 方法必須具有相同的訪問級別修飾符。

不能使用修飾符 new、static、virtual 或 abstract 來修改 override 方法。

◆重寫屬性宣告必須指定與繼承屬性完全相同的訪問修飾符、型別和名稱,並且被重寫的屬性必須是 virtual、abstract 或 override 的。

public

class baseclass  

}  public

class derivedclass : baseclass  

可以看出,重寫與前面講的過載是有區別的。

c#繼承中的方法過載

方法過載並不是類繼承中的內容,只是它容易和重寫等混淆,所以放在一起談談。

什麼是過載呢,舉個例子,我們在應用 system.io.file.create() 方法時,往往可以選擇幾種引數,這是就方法的過載,同乙個作用域、同乙個方法名稱、具有不同的引數型別或引數個數,在呼叫方法時,根據引數自動決定使用哪乙個方法。

示例

public

string getstring()  

public

string getstring(int index)  

public

string getstring(string username)  

在c#中,方法引數沒有預設值,可通過過載來實現預設值功能。

重寫是對方法進行重寫,而過載就是同乙個方法,具有不同的引數型別或引數個數盡興過載~。。不能混為一談·

C 繼承詳解

目錄簡介 通過示例引出繼承的作用 如何解決此類冗餘問題 使用繼承 繼承的思想 提取共性 封裝到乙個類 中實現繼承 實現繼承後的關係如下圖 繼承後的能力 繼承的特性 1.繼承的單根性 2.繼承的傳遞性 繼承被後的秘密 子類和父類的建構函式 難點 嘗試執行 為什麼會提示報這個錯誤?意思說父類不能沒有乙個...

C 繼承相關知識

在物件導向的程式設計中,有兩種截然不同繼承型別 實現繼承和介面繼承 1.實現繼承和介面繼承 實現繼承 表示乙個型別派生於基型別,它擁有該基型別的所有成員欄位和函式。在實現繼承中,派生型別採用基型別的每個函式的實現 除非在派生型別的定義中指定某個函式的實現 在需要給現有的型別新增功能,或許多相關的型別...

c 虛繼承詳解

include using namespace std class a class b public virtual a class c public virtual a virtual void t int main virtual void foo void int x a 很簡單 乙個虛表指標...