經(jīng)典C/C++面試題

時(shí)間:2022-07-11 20:49:56 面試 我要投稿
  • 相關(guān)推薦

經(jīng)典C/C++面試題

1.介紹一下STL,詳細說(shuō)明STL如何實(shí)現vector。

經(jīng)典C/C++面試題

Answer:

STL (標準模版庫,Standard Template Library)它由容器算法迭代器組成。

STL有以下的一些優(yōu)點(diǎn):

可以方便容易地實(shí)現搜索數據或對數據排序等一系列的算法;

調試程序時(shí)更加安全和方便;

即使是人們用STL在UNIX平臺下寫(xiě)的代碼你也可以很容易地理解(因為STL是跨平臺的)。

vector實(shí)質(zhì)上就是一個(gè)動(dòng)態(tài)數組,會(huì )根據數據的增加,動(dòng)態(tài)的增加數組空間。

2.如果用VC開(kāi)發(fā)程序,常見(jiàn)這么幾個(gè)錯誤,C2001,c2005,c2011,這些錯誤的原因是什么。

Answer:

在學(xué)習VC++的過(guò)程中,遇到的LNK2001錯誤的錯誤消息主要為:

unresolved external symbol “symbol”(不確定的外部“符號”)。

如果連接程序不能在所有的庫和目標文件內找到所引用的函數、變量或標簽,將產(chǎn)生此錯誤消息。

一般來(lái)說(shuō),發(fā)生錯誤的原因有兩個(gè):一是所引用的函數、變量不存在、拼寫(xiě)不正確或者使用錯誤;其次可能使用了不同版本的連接庫。

編程中經(jīng)常能遇到LNK2005錯誤重復定義錯誤,其實(shí)LNK2005錯誤并不是一個(gè)很難解決的錯誤.

3.繼承和委派有什么分別,在決定使用繼承或者委派的時(shí)候需要考慮什么。

在OOD,OOp中,組合優(yōu)于繼承.

當然多態(tài)的基礎是繼承,沒(méi)有繼承多態(tài)無(wú)從談起。

當對象的類(lèi)型不影響類(lèi)中函數的行為時(shí),就要使用模板來(lái)生成這樣一組類(lèi)。

當對象的類(lèi)型影響類(lèi)中函數的行為時(shí),就要使用繼承來(lái)得到這樣一組類(lèi).

4.指針和引用有什么分別;如果傳引用比傳指針安全,為什么?如果我使用常量指針難道不行嗎?

(1) 引用在創(chuàng )建的同時(shí)必須初始化,即引用到一個(gè)有效的對象;而指針在定義的時(shí)候不必初始化,可以在定義后面的任何地方重新賦值.

(2) 不存在NULL引用,引用必須與合法的存儲單元關(guān)聯(lián);而指針則可以是NULL.

(3) 引用一旦被初始化為指向一個(gè)對象,它就不能被改變?yōu)榱硪粋(gè)對象的引用;而指針在任何時(shí)候都可以改變?yōu)橹赶蛄硪粋(gè)對象.給引用賦值并不是改變它和原始對象的綁定關(guān)系.

(4) 引用的創(chuàng )建和銷(xiāo)毀并不會(huì )調用類(lèi)的拷貝構造函數

(5) 語(yǔ)言層面,引用的用法和對象一樣;在二進(jìn)制層面,引用一般都是通過(guò)指針來(lái)實(shí)現的,只不過(guò)編譯器幫我們完成了轉換.

不存在空引用,并且引用一旦被初始化為指向一個(gè)對象,它就不能被改變?yōu)榱硪粋(gè)對象的引用,顯得很安全。

const 指針仍然存在空指針,并且有可能產(chǎn)生野指針.

總的來(lái)說(shuō):引用既具有指針的效率,又具有變量使用的方便性和直觀(guān)性.

5.參數傳遞有幾種方式;實(shí)現多態(tài)參數傳遞采用什么方式,如果沒(méi)有使用某種方式原因是什么;

傳值,傳指針或者引用

6.結合一個(gè)項目說(shuō)明你怎樣應用設計模式的理念。

設計模式更多考慮是擴展和重用,而這兩方面很多情況下,往往會(huì )被忽略。

不過(guò),我不建議濫用設計模式,以為它有可能使得簡(jiǎn)單問(wèn)題復雜化.

7.介紹一下你對設計模式的理解。(這個(gè)過(guò)程中有很多很細節的問(wèn)題隨機問(wèn)的)

設計模式概念是由建筑設計師Christopher Alexander提出:"每一個(gè)模式描述了一個(gè)在我們周?chē)粩嘀貜桶l(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心.這樣,你就能一次又一次地使用該方案而不必做重復勞動(dòng)."上述定義是對設計模式的廣義定義.將其應用到面向對象軟件的領(lǐng)域內,就形成了對設計模式的狹義定義.

可以簡(jiǎn)單的認為:設計模式就是解決某個(gè)特定的面向對象軟件問(wèn)題的特定方法, 并且已經(jīng)上升到理論程度。

框架與設計模式的區別:

1,設計模式和框架針對的問(wèn)題域不同.設計模式針對面向對象的問(wèn)題域;框架針對特定業(yè)務(wù)的問(wèn)題域

2,設計模式比框架更為抽象.設計模式在碰到具體問(wèn)題后,才能產(chǎn)生代碼;框架已經(jīng)可以用代碼表示

3,設計模式是比框架更小的體系結構元素.框架中可以包括多個(gè)設計模式

設計模式就像武術(shù)中基本的招式.將這些招式合理地縱組合起來(lái),就形成套路(框架),框架是一種半成品.

8.C++和C定義結構的分別是什么。

C language 的結構僅僅是數據的結合

C plus plus的struct 和 class 其實(shí)具備幾乎一樣的功能,只是默認的訪(fǎng)問(wèn)屬性不一樣而已。

9.構造函數可否是虛汗數,為什么?析構函數呢,可否是純虛的呢?

構造函數不能為虛函數,要構造一個(gè)對象,必須清楚地知道要構造什么,否則無(wú)法構造一個(gè)對象。

析構函數可以為純虛函數。

10.拷貝構造函數相關(guān)問(wèn)題,深拷貝,淺拷貝,臨時(shí)對象等。

深拷貝意味著(zhù)拷貝了資源和指針,而淺拷貝只是拷貝了指針,沒(méi)有拷貝資源

這樣使得兩個(gè)指針指向同一份資源,造成對同一份析構兩次,程序崩潰。

臨時(shí)對象的開(kāi)銷(xiāo)比局部對象小些。

11.結合1個(gè)你認為比較能體現OOp思想的項目,用UML來(lái)描述。(最好這個(gè)項目繼承,多態(tài),虛函數都有體現)這個(gè)問(wèn)題大概會(huì )占面試時(shí)間的一半,并且會(huì )問(wèn)很多問(wèn)題,一不小心可能會(huì )被問(wèn)住)。

。。。

12.基類(lèi)的有1個(gè)虛函數,子類(lèi)還需要申明為virtual嗎?為什么。

不申明沒(méi)有關(guān)系的。

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

13.C也可以通過(guò)精心封裝某些函數功能實(shí)現重用,那C++的類(lèi)有什么優(yōu)點(diǎn)嗎,難道僅僅是為實(shí)現重用。

并不僅僅是這樣的。

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

類(lèi)的三大最基本的特征:封裝,繼承,多態(tài).

14.C++特點(diǎn)是什么,如何實(shí)現多態(tài)?畫(huà)出基類(lèi)和子類(lèi)在內存中的相互關(guān)系。

多態(tài)的基礎是繼承,需要虛函數的支持,簡(jiǎn)單的多態(tài)是很簡(jiǎn)單的。

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

15.為什么要引入抽象基類(lèi)和純虛函數?

主要目的是為了實(shí)現一種接口的效果。

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

模板可以說(shuō)比較古老了,但是當前的泛型編程實(shí)質(zhì)上就是模板編程。

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

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

17.你如何理解MVC。簡(jiǎn)單舉例來(lái)說(shuō)明其應用。

MVC模式是observer 模式的一個(gè)特例,典型的有MFC里面的文檔視圖架構。

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

使用虛擬繼承即可.


【經(jīng)典C/C++面試題】相關(guān)文章:

c面試題08-04

華為c8812配置08-04

c語(yǔ)言實(shí)踐報告01-17

軟件測試面試題及答案12-30

星巴克面試題目07-18

華為c8812解鎖方法08-01

c語(yǔ)言程序設計心得05-19

c語(yǔ)言課程設計心得06-16

《z c s》說(shuō)課設計10-14

小學(xué)z、c、s、教學(xué)設計11-25

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆