C 介面 經典例項

2021-08-25 13:08:31 字數 2288 閱讀 3568

介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦定義了介面,就可以在類中實現它。這樣,類就可以支援介面所指定的所有屬性和成員。介面不能單獨存在;不能進行例項化(因為沒有必要例項化);介面不包括任何實現其成員的**而只定義了成員本身;成員的實現將在實現介面的類中實現。

以上是介面的書本定義,讀完基本不知所云。就知道了介面與類不一樣,介面與類都需要定義自身的成員,但介面不能實現成員的功能。我覺得可以簡單地說:介面是類的更高階抽象(類已經是其所要實現的過程的抽象了),介面定義了類實現的規範。介面好像是事先定義好的備忘錄,提醒你,類需要有這些成員,需要完成這些功能。但是,不同的類,他們具體的實現方式則需要你單獨去定義了。

舉乙個簡單的例子,我覺得很好很經典。

正如圖中所示,我們定義了乙個ihuman的介面,以及student和teacher兩個類。眾所周知,學生和老師都是人(雖然他們之間總是或多或少的存在著些許不可調和的矛盾)。因此,學生和老師都有年齡的屬性、同樣需要吃飯、睡覺...。

但是,幾乎可以確定的是,學生和老師是兩代人,他們之間有代溝,去完成作為乙個人所必須完成的事情的時候,所採用的方式方法是不同的。同時,他們也有不同的行為。比如,乙個30歲的副教授,想必已經結婚,所以需要傳宗接代、孝敬父母、愛護祖國花朵、教書育人、賺錢餬口...。而學生呢,正值妙齡,血氣方剛,不甘寂寞,可想而知...

這樣做有什麼好處呢?畢竟,沒有好處的事情是不會有人去做的。試想,我們沒有定義ihuman介面,而是分別定義了student、teacher類。有一天,乙個想兒子想瘋了的家長突然出現在不知所措的學生和老師中間。你需要重新定義乙個parent類,他既不去食堂吃飯也不回家睡覺,一切食宿都在賓館解決。萬一你忘記了parent也是正常人,沒有定義parent如何去睡覺,是不是要讓parent活活困死呢?當有一天,全國千千萬萬的新新人類都來到了校園,你會忘記的事情是不是也將會是千千萬萬,你害死的鮮活生命何以計數呢?

當我們有了ihuman介面,不管怎麼說,家長還是人,我們定義乙個parent類:

家長此行的其他目的,無非是對學生曉之以錢,對老師動之以禮等等,可以隨他折騰了。同時,你還沒有忘記需要完美地解決家長的食宿問題。所有的新新人類還是人,完全不用擔心你會忘記他們作為人的需求(忘記了?會有編譯錯誤報告告訴你的...)。

上面只是舉了乙個介面與多個類的例子。實際應用中,我們可以再定義乙個iteacher的介面,teacher類對應ihuman和iteacher兩個介面,分別規範了老師作為一名人民教師以及乙個人的動作。也就是乙個類可以同時實現多個介面。

不過好像還是不太明白介面與基類的區別。以下是幾個形象的比喻:

1.飛機會飛,鳥會飛,他們都繼承了同乙個介面「飛」;然而同樣會飛的f22和鴿子,乙個屬於「飛機」類,另乙個屬於「鳥」類。

2. 鐵門跟木門都是門(基類),你想要個門我給不了(基類不能例項化),但我可以給你個具體的鐵門或木門(多型);而且只能是門,你不能說它是窗(繼承類只能繼承於乙個基類——單繼承);乙個門可以有鎖(介面)也可以有門鈴(另乙個介面,多實現)。 門定義了你是什麼,介面(鎖、門鈴)規定了你能做什麼,(乙個介面最好只能做一件事,你不能要求鎖也能發出聲音吧)。至於鐵門的鎖是什麼牌子的,木門的門鈴是什麼聲音的,那就是鐵門和木門需要關心的事兒了。

總結

以下是我們必須牢記於心的地方,介面只包含方法、委託或事件的簽名。方法的實現是在實現介面的類中完成的,介面可以是命名空間或類的成員,並且可以包含下列成員的簽名:方法、屬性、索引器、事件,乙個介面可從乙個或多個基介面繼承。當基型別列表包含基類和介面時,基類必須是列表中的第一項。實現介面的類可以顯式實現該介面的成員。顯式實現的成員不能通過類例項訪問,而只能通過介面例項訪問。

通常認為介面要比基類更加靈活,類只要實現了某一介面,呼叫者便可以利用該介面實現多型訪問,在元件化開發中很常用,由元件規範定義者去定義乙個介面,不同分工的發人員按照各自的目的去實現這個介面。而基類的方式相對比較死板,但有一些比較通用的方法就可以不必在子類中重寫了。二者不能夠說誰的功能更強大,或者說誰能取代誰,只是我們可以根據需要選用。例如.net框架中的textbox,label等是從webcontrol繼承過來,採用基類的方式,而sqlconnection和oracleconnection實現idbconnection的介面,這樣程式就可以使用idbconnection介面去訪問不同型別的資料庫。

C 介面 經典例項

介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦定義了介面,就可以在類中實現它。這樣,類就可以支援介面所指定的所有屬性和成員。介面不能單獨存在 不能進行例項化 因為沒有必要例項化 介面不包括任何實現其成員的 而只定義了成員本身 成員的實現將在實現介面的類中實現。以上是介面的書本定義...

C語言經典例項

程式分析 可填在百位 十位 個位的數字都是1 2 3 4。組成所有的排列後再去選擇滿足條件的 include int main void return 0 程式分析 在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果 include in...

core 例項化介面 C 介面

學習環境搭建1 linux c語言 嵌入式開發工程師 創客學院 www.makeru.com.cn 介面描述了類的行為和功能,而不需要完成類的特定實現。c 介面是使用抽象類來實現的,抽象類與資料抽象互不混淆,資料抽象是乙個把實現細節與相關的資料分離開的概念。如果類中至少有乙個函式被宣告為純虛函式,則...