當前位置:全科學識雲 > 職場範文 > 面試 > 經典C/C++面試題
手機版

經典C/C++面試題

來源:全科學識雲 閱讀:1.84W 次

1.介紹一下STL,詳細說明STL如何實現vector。

經典C/C++面試題

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來描述。(最好這個項目繼承,多態,虛函數都有體現)這個問題大概會佔面試時間的一半,並且會問很多問題,一不小心可能會被問住)。

。。。

12.基類的有1個虛函數,子類還需要申明爲virtual嗎?爲什麼。

不申明沒有關係的。

不過,我總是喜歡顯式申明,使得代碼更加清晰。

13.C也可以透過精心封裝某些函數功能實現重用,那C++的類有什麼優點嗎,難道僅僅是爲實現重用。

並不僅僅是這樣的。

OOD,OOp從根本上改變了程序設計模式和設計思想,具備重大和深遠的意義。

類的三大最基本的特徵:封裝,繼承,多態.

14.C++特點是什麼,如何實現多態?畫出基類和子類在內存中的相互關係。

多態的基礎是繼承,需要虛函數的支援,簡單的多態是很簡單的。

子類繼承父類大部分的資源,不能繼承的有構造函數,析構函數,拷貝構造函數,operator=函數,友元函數等等

15.爲什麼要引入抽象基類和純虛函數?

主要目的是爲了實現一種接口的效果。

16.介紹一下模板和容器。如何實現?(也許會讓你當場舉例實現)

模板可以說比較古老了,但是當前的泛型編程實質上就是模板編程。

它體現了一種通用和泛化的思想。

STL有7種主要容器:vector,list,deque,map,multimap,set,multiset.

17.你如何理解MVC。簡單舉例來說明其應用。

MVC模式是observer 模式的一個特例,典型的有MFC裏面的文檔視圖架構。

18.多重繼承如何消除向上繼承的二義性。

使用虛擬繼承即可.

本文連結:https://www.qkxsy.com/zhichangfw/mianshi/6drek.html

Copyright © 2024. 全科學識雲 All right reserved.

文字美圖素材,版權屬於原作者。部分文章內容由網友提供推送時因種種原因未能與原作者聯繫上,若涉及版權問題,敬請原作者聯繫我們,立即處理。