16. 關聯、聚合(aggregation)以及組合(composition)的區別?
涉及到uml中的一些概念:關聯是表示兩個類的一般性聯絡,比如「學生」和「老師」就是一種關聯關係;聚合表示has-a的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係:
500)" border=0>
從實現的角度講,聚合可以表示為:
class a class b
而組合表示contains-a的關係,關聯性強於聚合:組合類與被組合類有相同的生命週期,組合類要對被組合類負責,採用實心的菱形表示組合關係:
500)" border=0>
實現的形式是:
class a class b
參考文章:
17.物件導向的三個基本特徵,並簡單敘述之?
1. 封裝:將客觀事物抽象成類,每個類對自身的資料和方法實行protection(private, protected,public)
2. 繼承:廣義的繼承有三種實現形式:實現繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現**)、介面繼承(僅使用屬性和方法,實現滯後到子類實現)。前兩種(類繼承)和後一種(物件組合=>介面繼承以及純虛函式)構成了功能復用的兩種方式。
允許將子類型別的指標賦值給父類型別的指標。
18.過載(overload)和重寫(overried,有的書也叫做「覆蓋」)的區別?
常考的題目。從定義上來說:
過載:是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。
重寫:是指子類重新定義復類虛函式的方法。
從實現原理上來說:
過載:編譯器根據函式不同的參數列,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式(至少對於編譯器來說是這樣的)。如,有兩個同名函式:function func(p:integer):integer;和function func(p:string):integer;。
那麼編譯器做過修飾後的函式名稱可能是這樣的:int_func、str_func。對於這兩個函式的呼叫,在編譯器間就已經確定了,是靜態的。也就是說,它們的位址在編譯期就繫結了(早繫結),因此,過載和多型無關!
。當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,動態的呼叫屬於子類的該函式,這樣的函數呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在執行期繫結的(晚繫結)。
19. 多型的作用?
主要是兩個:1. 隱藏實現細節,使得**能夠模組化;擴充套件**模組,實現**重用;2. 介面重用:為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫。
20. ado與ado.net的相同與不同?
除了「能夠讓應用程式處理儲存於dbms 中的資料「這一基本相似點外,兩者沒有太多共同之處。但是ado使用ole db 介面並基於微軟的com 技術,而ado.net 擁有自己的ado.net 介面並且基於微軟的.net 體系架構。眾所周知.net 體系不同於com 體系,ado.net 介面也就完全不同於ado和ole db 介面,這也就是說ado.net 和ado是兩種資料訪問方式。ado.net 提供對xml 的支援。
C C 筆試 面試題目總結,
基本都沒寫答案,查詢答案的過程就是學習的過程,會的也會引起一些思考。1.extern extern c 的作用,如何判斷一段程式是由c 編譯還是由c 編譯程式編譯的?2.程序和執行緒的區別和聯絡 3.inline 的作用 4.kmp演算法 5.函式呼叫方式 cdecl 堆疊由呼叫者清除 引數從右至左...
數字ic筆試面試 題目彙總
1 fpga資源 問你用的哪些fpga,你用的那款fpga的dsp片數,佔了多少資源,響應時間多少 2 專案相關 讓你畫專案的結構框圖,系統框架 3 濾波器設計 4 fpga裡面的slice,為什麼要用ram,資源優化,時序約束,建立時間,chipscope除錯時,取樣率的設定。5 axi協議,問u...
C 面試題目彙總二
int func int x return countx 思路 將x轉化為2進製,看含有的1的個數。答案是8.const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤 邊際效應 有些整合化的...