C 語法學習抽像類 abstract

2021-09-08 06:34:50 字數 3091 閱讀 9635

/*

* created by sharpdevelop.

* user: administrator

* date: 2008/9/3

* time: 上午 11:04

* 抽像類(abstract)

* abstract修飾符可以和類,方法,屬性,索引器及事件一起使用.

* 在類宣告中使用abstract修飾符以指示某個類只能是其他類的基類.

* 標記為抽像或包含在抽像類中的成員必須通過從抽像類派生的類來實現.

* * 抽像類的特性

* 1,抽像類不能例項化.

* 2,抽像類可以包含抽像方法和抽像訪問器.

* 3,不能用sealed修飾符修改抽像類,這意味著抽像類不能被繼承.sealed是防止被繼承才用的.

* 4,從抽像類派生的非抽像類必須包括繼承的所有抽像方法和抽像訪問器的實現.

* * 

*/using

system;

abstract

class

aclass

b:aclass

test}

/** created by sharpdevelop.

* user: administrator

* date: 2008/9/3

* time: 上午 11:17

* 抽像方法,在此處只能宣告,不能實現,必需在其子類中實現

* 抽像方法必需是宣告在抽像類中

* 抽像方法必需是public型別的

* * 

* 其子類在實現抽像類的方法,屬性,索引器和事件時

* 如果子類也是抽像類的話可以不用實現

* 反過來如果子類不是抽像類的話就必需去實現

* * 抽像方法的特點

* 1,抽像方法是隱式的虛方法.

* 2,只允許在抽像類中使用抽像方法宣告.

* 3,因為抽像方法宣告不提供實際的實現,所以沒有方法;

* 方法宣告只是以乙個分號結束,並且在簽名後沒有大括號({})

* 實現由乙個重寫方法提供,此重寫方法是非抽像像的成員.

* 4,在抽像方法宣告中使用static或是virtual修飾符是錯誤的.

* 5,除了在宣告和呼叫語法上不同外,抽像屬性的行與抽像方法一樣.

* 6,在靜態屬性上使用abstract修飾符是錯誤的.

* 7,在派生類中,通過包括使用override修飾符的屬性宣告,可以重寫抽像的繼承屬性.** 

*/using

system;

abstract

classa}

class

b:apublic

override

intx

set}

}class

test}

/** created by sharpdevelop.

* user: administrator

* date: 2008/9/3

* time: 上午 11:38

* 抽像類的建構函式

* 任何情況下,抽像類都不應進行例項化,因此,正確定議其建構函式就非常重要.

* 確保抽像類功能的正確性和擴充套件性也很重要.下列準則有助於確保抽像類能夠

* 正確地設計在實現後可以按預期方式工作.

* 1,不要在抽像型別中定議公共的或是受保護的內部建構函式,有public或

* protected internal可見性的建構函式用於能進行例項化的型別.任何情況

* 下抽像型別都不能例項化.

* 2,應在抽像類中定議乙個受保護(protected)建構函式或內部(private)建構函式.

* 3,如果在抽像類中定議乙個受保護建構函式,則在建立子類的例項時,基類可執行

* 初始化任務.

* * 下面的例子是用抽像類改造的虛方法中的乙個例子,同樣也實現了多型的方法.

* 並且在子類中初始化了基類的建構函式

* * 抽像和虛方法都實現了多型的機制,那麼情況下應該怎麼使用這兩者:

* 1,在所有的子類都要實現一些共同的功能時候,這個時候比較常用虛方法.

* 因為我們可以把這些共同的功能包裝到基類的方法中,在子類中使用base來讞用.

* 2,如果子類的方法各不相干,他們沒有共同的功能時,這個時候比較常用抽像類.

* * 抽像方法和虛方法的區別

* 1,抽像方法和虛方法的區別在於:虛方法有乙個實現部份,並為子類提供了覆蓋該方法的選項,相反,抽像方法沒有提供實現部份,強制子類覆蓋該方法(否則子類不能成為具體類)

* 2,abstract方法只能在抽像類中宣告,虛方法則不是.

* 3,abstract方法必須在子類中重寫,而virtual則不必.

* 4,abstract方法不能宣告方法實體,虛方法則可以.

* 5,包含abstract方法的類不能被例項化,而包含virtual的類則可以.

* */

using

system;

abstract

class

employee

protected

employee(

string

name)

public

abstract

void

startwork();

}class

manager : employee

public

override

void

startwork()

}class

secretary : employee

public

override

void

startwork()

}class

seller : employee

public

override

void

startwork()}//

新增員工時只需要再新增乙個類繼承自employee

class

accountant : employee

public

override

void

startwork()

}class

test}}

c 語法學習

迴圈和關係表示式 for迴圈 表示式和語句 遞增和遞減,字首式效率更高 組合賦值操作符 復合語句 逗號操作符 關係操作符,和 while迴圈 typedef工具 dowhile迴圈 get 字元輸入方法 檔案尾條件 巢狀迴圈和二維數值 strcmp a,b 判斷兩個字串是否相等 cin如何處理字元輸...

C 基礎語法學習

基本用語區分 解決方案和專案 解決一類問題的方案。比如要建一套房子是不是要有一套解決方案,那是不是要把該方案分解成幾個小專案,如設計,裝修,水電安裝,材料運輸等專案 c 和.net net 是一種平台一種技術,裡面包含著乙個非常大的 庫 可以模擬成 jvm c 是一種語言,我們可以使用c 去呼叫.n...

C 語法學習(6)

1.函式重寫 在子類中定義與父類中原型相同的函式 函式重寫只發生在父類與子類之間 過載與重寫區別 過載 同乙個作用域 子類無法過載父類函式,父類同名函式將被覆蓋 過載是在編譯期間根據引數型別和個數決定 重寫 發生於父類 子類之間 父類和子類函式有相同的函式原型 使用virtual關鍵字宣告後能夠產生...