C 繼承的實現方式

2022-02-21 01:49:32 字數 1656 閱讀 8035

虛方法:

如果要在派生類中繼承方法或屬性,那麼就必須在基類中將該屬性宣告為virtual。

方法或屬性在預設情況下是不虛擬的,所以如果不在基類中顯示宣告,在派生類中用override重寫該方法時就會報錯。

當然,如果在派生類中用new來隱藏基類方法也沒有問題。

我們看下面乙個例子:

public

class

a

public

virtual

void

methodg()

}public

class

b : a

public

override

void

methodg()

}class

test

它的結果是: 

a.f b.f b.g b.g

也許你會很奇怪為什麼a.methodg()的結果為什麼是b.g。

那是因為a的methodg方法是虛方法,如果有派生類繼承了這個方法,那麼它就會首先去找這個派生類的繼承方法並實現它。

隱藏方法

通常是在不重寫基類方法,但又需要再派生類中建立乙個相同方法時使用。

只要在派生類方法的前面加乙個new就能實現對基類方法的隱藏。

如:

class

baseclass }

class

test1 : baseclass

}

如果new乙個基類,則呼叫add方法時調的是基類的add方法。

反之則呼叫add方法時調的是派生類的add方法。

密封類和密封方法:

這個簡單,只要在類或方法前宣告乙個sealed屬性,就可以讓該類或方法無法被繼承。

在c#中,string類就是乙個sealed類。但是讓我們認真分析一下string類,可以發現它還是有3個方法是可以繼承的。

gethashcode(),tostring(),equals()

然後對比這三個方法與其他方法的不同,可以發現只有這三個方法是被宣告了override屬性。

也就是說,在sealed類中,只要將方法宣告為override,該方法就可以被繼承。

派生類的建構函式

我看的是c#高階程式設計第七版中的「派生類的建構函式」一節,老實說畢竟是翻譯的書籍,理解起來有點深澀,於是上網找了乙個略解,意思就清楚了。

大概的意思是如有基類沒有預設的無參建構函式,只有有參建構函式,派生類就必須要往基類傳參。具體可以看上面鏈結裡的內容。

然後書中的例子也有些不當。

例子是:

class

baseclass

}class

test1 : baseclass

}

像name這樣的通用屬性,一般不會用private屬性進行修飾,而是用protected進行修飾。本來意思就是晦澀了,搞個不倫不類的例子,誤導人啊這是!

改造後可以寫成這樣:

class

baseclass

}class

test1 : baseclass

}

繼承的實現方式

寫在前邊,先建立乙個父類,用於後邊的繼承。如下 定義乙個動物類 function animal name is sleeping 原型方法 animal.prototype.eat function food is eating 複製 核心 將父類的例項作為子類的原型 function cat ca...

c 的繼承方式

1 純虛函式 強制子類實現介面 c 中包含純虛函式的類,被稱為是 抽象類 抽象類不能使用new出物件,只有實現了這個純虛函式的子類才能new出物件。c 中的純虛函式更像是 只提供申明,沒有實現 是對子類的約束,是 介面繼承 c 中的純虛函式也是一種 執行時多型 如下面的類包含純虛函式,就是 抽象類 ...

C 繼承方式

簡單地說下c 類的3種繼承方式,分別是public繼承,protected繼承,private繼承。最常用的還是public繼承。class預設的是private繼承,它的member如果沒寫許可權也是預設 private。struct則相反,預設的是public繼承。結合下面的圖示和 對c 的繼承...