1.介紹一下stl,詳細說明stl如何實現vector。
answer:
stl (標準模版庫,standard template library)它由容器演算法迭代器組成。
stl有以下的一些優點:
可以方便容易地實現搜尋資料或對資料排序等一系列的演算法;
除錯程式時更加安全和方便;
即使是人們用stl在unix平台下寫的**你也可以很容易地理解(因為stl是跨平台的)。
vector實質上就是乙個動態陣列,會根據資料的增加,動態的增加陣列空間。
2.如果用vc開發程式,常見這麼幾個錯誤,c2001,c2005,c2011,這些錯誤的原因是什麼。
answer:
在學習vc++的過程中,遇到的lnk2001錯誤的錯誤訊息主要為:
unresolved external symbol 「symbol」(不確定的外部「符號」)。
如果連線程式不能在所有的庫和目標檔案內找到所引用的函式、變數或標籤,將產生此錯誤訊息。
一般來說,發生錯誤的原因有兩個:一是所引用的函式、變數不存在、拼寫不正確或者使用錯誤;其次可能使用了不同版本的連線庫。
程式設計中經常能遇到lnk2005錯誤——重複定義錯誤,其實lnk2005錯誤並不是乙個很難解決的錯誤.
3.繼承和委派有什麼分別,在決定使用繼承或者委派的時候需要考慮什麼。
在ood,oop中,組合優於繼承.
當然多型的基礎是繼承,沒有繼承多型無從談起。
當物件的型別不影響類中函式的行為時,就要使用模板來生成這樣一組類。
當物件的型別影響類中函式的行為時,就要使用繼承來得到這樣一組類.
4.指標和引用有什麼分別;如果傳引用比傳指標安全,為什麼?如果我使用常量指標難道不行嗎?
(1) 引用在建立的同時必須初始化,即引用到乙個有效的物件;而指標在定義的時候不必初始化,可以在定義後面的任何地方重新賦值.
(2) 不存在null引用,引用必須與合法的儲存單元關聯;而指標則可以是null.
(3) 引用一旦被初始化為指向乙個物件,它就不能被改變為另乙個物件的引用;而指標在任何時候都可以改變為指向另乙個物件.給引用賦值並不是改變它和原始物件的繫結關係.
(4) 引用的建立和銷毀並不會呼叫類的拷貝建構函式
(5) 語言層面,引用的用法和物件一樣;在二進位制層面,引用一般都是通過指標來實現的,只不過編譯器幫我們完成了轉換.
不存在空引用,並且引用一旦被初始化為指向乙個物件,它就不能被改變為另乙個物件的引用,顯得很安全。
const 指標仍然存在空指標,並且有可能產生野指標.
總的來說:引用既具有指標的效率,又具有變數使用的方便性和直觀性.
5.引數傳遞有幾種方式;實現多型引數傳遞採用什麼方式,如果沒有使用某種方式原因是什麼;
傳值,傳指標或者引用
6.結合乙個專案說明你怎樣應用設計模式的理念。
設計模式更多考慮是擴充套件和重用,而這兩方面很多情況下,往往會被忽略。
不過,我不建議濫用設計模式,以為它有可能使得簡單問題複雜化.
7.介紹一下你對設計模式的理解。(這個過程中有很多很細節的問題隨機問的)
設計模式概念是由建築設計師christopher alexander提出:"每乙個模式描述了乙個在我們周圍不斷重**生的問題,以及該問題的解決方案的核心.這樣,你就能一次又一次地使用該方案而不必 做重複勞動."上述定義是對設計模式的廣義定義.將其應用到物件導向軟體的領域內,就形成了對設計模式的狹義定義.
可以簡單的認為:設計模式就是解決某個特定的物件導向軟體問題的特定方法, 並且已經上公升到理論程度。
框架與設計模式的區別:
1,設計模式和框架針對的問題域不同.設計模式針對物件導向的問題域;框架針對特定業務的問題域
2,設計模式比框架更為抽象.設計模式在碰到具體問題後,才能產生**;框架已經可以用**表示
3,設計模式是比框架更小的體系結構元素.框架中可以包括多個設計模式
設計模式就像武術中基本的招式.將這些招式合理地縱組合起來,就形成套路(框架),框架是一種半成品.
8.c++和c定義結構的分別是什麼。
c language 的結構僅僅是資料的結合
c plus plus的struct 和 class 其實具備幾乎一樣的功能,只是預設的訪問屬性不一樣而已。
9.建構函式可否是虛汗數,為什麼?析構函式呢,可否是純虛的呢?
建構函式不能為虛函式,要構造乙個物件,必須清楚地知道要構造什麼,否則無法構造乙個物件。
析構函式可以為純虛函式。
10.拷貝建構函式相關問題,深拷貝,淺拷貝,臨時物件等。
深拷貝意味著拷貝了資源和指標,而淺拷貝只是拷貝了指標,沒有拷貝資源
這樣使得兩個指標指向同乙份資源,造成對同乙份析構兩次,程式崩潰。
臨時物件的開銷比區域性物件小些。
11.結合1個你認為比較能體現oop思想的專案,用uml來描述。(最好這個專案繼承,多型,虛函式都有體現)這個問題大概會佔面試時間的一半,並且會問很多問題,一不小心可能會被問住)。
。。。使用虛擬繼承即可.
經典C C 面試題
1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...
C C 經典面試題
2018 03 07 昨天在牛客上看到這麼一道c語言面試題,挺經典的,特來分享給大家。程式如下,問輸出結果 include int main int p int a 1 printf d d a 1 p 1 a 1 其實很簡單,指的就是a 1 輸出2,沒問題。關鍵就在於這個第二個輸出 p 1 是多少...
經典C C 面試題(三)
1 什麼是預編譯,何時需要預編譯 總是使用不經常改動的大型 體。程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項。在這種情況下,可以將所有包含檔案預編譯為乙個預編譯頭。2 char const p char const p const char p 上述三個有什麼區別?char ...