




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 18 章文字解答實(shí)戰(zhàn)題前面的章節(jié)已經(jīng)介紹了在 C/C+面試中的大部分考點(diǎn),覆蓋了基礎(chǔ)知識(shí)高級(jí)算法的各個(gè)方面。本章將之前介紹的知識(shí)做試題的介紹和分析,提供一些各大公司的經(jīng)典和常見(jiàn)試題,以及考題和完整的解題思路分析,幫助讀者鞏固 C/C+面試的各個(gè)考點(diǎn),通過(guò)大量的練習(xí)進(jìn)一步提高實(shí)戰(zhàn)能力。文字解答題考的是 C/C+程序員的語(yǔ)言基礎(chǔ)和工作經(jīng)驗(yàn)等方面的知識(shí),以及一些簡(jiǎn)單但是可能設(shè)有“陷阱”的計(jì)算和程序邏輯推理。C/C+的基礎(chǔ)和經(jīng)驗(yàn)對(duì)于反映一個(gè)程序員的水平是非常重要的,很多公司在面試時(shí)都會(huì)準(zhǔn)備這種類型的題目。下面將介紹一些常見(jiàn)的經(jīng)驗(yàn)概念試題以及相關(guān)分析和解答。面試題 199介紹 STL,詳細(xì)說(shuō)明 ST
2、L 如何實(shí)現(xiàn) vector(面試題)【分析與】STL(標(biāo)準(zhǔn)模版庫(kù),Standard Template Library)它由容器算法迭代器組成。本題應(yīng)聘者對(duì)于 STL 的了解。STL 有包括以下一些優(yōu)點(diǎn)。qqq可以方便容易地實(shí)現(xiàn)搜索數(shù)據(jù)或?qū)?shù)據(jù)排序等一系列的算法; 調(diào)試程序時(shí)更加安全和方便;即使是程序員使用 STL 在 UNIX 平臺(tái)下寫(xiě)的代碼讀者也可以很容易地理解(因?yàn)镾TL 是跨平臺(tái)的)。vector 實(shí)質(zhì)上就是一個(gè)動(dòng)態(tài)數(shù)組,會(huì)根據(jù)數(shù)據(jù)的增加,動(dòng)態(tài)的增加數(shù)組空間。以下是一段基于 SGI STL 的一個(gè) vector 的實(shí)現(xiàn)的代碼:#include <alloc.h>/內(nèi)存分配器頭
3、文件,非標(biāo)準(zhǔn)#include <iterator.h>/迭代器頭文件,非標(biāo)準(zhǔn)template <class T >/模板類,提供泛型功能class vectortypedef alloc Alloc;/內(nèi)存分配器 typedef public:typedef T value_type;/值類型 T typedef value_type* pointer;/指針類型 T*typedef value_type* iterator;/迭代器,這里的迭代器不需要,只是一個(gè)原生指針的 typedef typedef const value_type* const_iterator
4、; /只讀迭代器typedef value_type& reference;/T&typedef const value_type& const_reference; /只讀typedef size_t size_type;/長(zhǎng)度類型 size_t,一般是 unsigned int;第 18 章 文字解答實(shí)戰(zhàn)題從示例代碼中可以看到,vector 使用 allocator 來(lái)進(jìn)行內(nèi)存管理,使用 3 個(gè)迭代器來(lái)引用這存。vector 的 iterator 其實(shí)就是 T*的別名。在續(xù)的內(nèi)存里(數(shù)組),指針是可以做算術(shù)運(yùn)算的,也支持操作,由此,vector 的 iterator
5、 也支持算術(shù)運(yùn)算,+,-,+=,-=,。vector 的迭代器就是通常的隨機(jī)迭代器了。面試題 200分析 Visual C+程序出錯(cuò)的使用 Visual C+開(kāi)發(fā)程序經(jīng)常會(huì)遇見(jiàn)這幾個(gè)錯(cuò)誤:LNK2001,C2001,c2005,c2011。請(qǐng)問(wèn)出現(xiàn)這些錯(cuò)誤的是什么?【分析與】在學(xué)習(xí) Visual C+的過(guò)程中,遇到的 LNK2001 錯(cuò)誤的消息主要為 unresolved、externalsymbol“symbol”(不確定的外部“符號(hào)”)。本題主要是應(yīng)聘者是否有足夠的經(jīng)驗(yàn)。如果連接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所的函數(shù)、變量或,將產(chǎn)生此錯(cuò)誤消息。一般來(lái)說(shuō),發(fā)生錯(cuò)誤的主要有以下兩個(gè):(1)
6、是所的函數(shù)、變量不存在、拼寫(xiě)不正確或者使用錯(cuò)誤。(2)可能使用了不同版本的連接庫(kù)。編譯器錯(cuò)誤 C2001:常數(shù)中有換行符。字符串常數(shù)不能繼續(xù)到第二行,除非進(jìn)行此類操作: 用反斜杠結(jié)束第一行。用一個(gè)雙引號(hào)結(jié)束第一行上的字符串,并在下一行使用另一個(gè)雙引號(hào)開(kāi)始該字符串。用 n 結(jié)束第一行是不夠的,例如下面的代碼:下一行開(kāi)始處位于行繼續(xù)的空格包含在字符串常數(shù)中。以上顯示的示例都沒(méi)有將換行符嵌入字符串常數(shù)中,可以按如下所示嵌入換行符:printf("Hello,nworld");·239·printf("Hello, world"); /錯(cuò)誤p
7、rintf("Hello,nworld"); /錯(cuò)誤printf("Hello, world"); /正確printf("Hello,"" world"); /正確typedef ptrdiff_t difference_type; /指針間隔,用來(lái)表示兩個(gè)指針間的距離typedef reverse_iterator<const_iterator, value_type, const_reference, difference_type> const_reverse_iterator;/反向迭代器,定義
8、在<iterator.h> typedef reverse_iterator<iterator, value_type, reference, difference_ type>reverse_iterator;/只讀反向迭代器protected:/數(shù)據(jù)成員typedef simple_alloc<value_type, Alloc> data_allocator;/分配器的 typedefiterator start;/vector 的第一個(gè)元素的迭代器,用來(lái)表示 vector,永遠(yuǎn)為 vector.begin(); iterator finish;/ve
9、ctor 的末尾,指向 vector 的最后一個(gè)元素的下一個(gè)位置。永遠(yuǎn)為 vector.end(); iterator end_of_storage;/vector 所擁有的內(nèi)存的末尾。如果等于 vector.end(),表示 vector 已滿第 4 篇 C/C+面試題實(shí)戰(zhàn)編譯器錯(cuò)誤 C2005:#line 應(yīng)輸入行號(hào),卻找到“token”。#line 指令后面必須跟行號(hào)。下面的示例生成 C2005:編譯器錯(cuò)誤 C2011:“identifier”:“type”類型重定義,該標(biāo)識(shí)符已定義為 type 類型。如果多次將某個(gè)類型庫(kù)導(dǎo)入同一個(gè)文件,也可能生成 C2011,例如下面的代碼:面試題 2
10、01繼承和多態(tài)有何區(qū)別【分析與】本題應(yīng)聘者對(duì)面向?qū)ο髴?yīng)用的了解。在 OOD 和 OOP 中,多態(tài)組合優(yōu)于繼承。多態(tài)的基礎(chǔ)是繼承,沒(méi)有繼承,多態(tài)無(wú)從談起。(1) 對(duì)象的類型不影響類中函數(shù)的行為時(shí),就要使用模板來(lái)生成這樣一組類。(2) 對(duì)象的類型影響類中函數(shù)的行為時(shí),就要使用繼承來(lái)得到這樣一組類。面試題 202有何區(qū)別?傳指針和比傳指針安全,為什么【分析與本題(1)】應(yīng)聘者對(duì)于 C/C+最基礎(chǔ)的指針的了解,如下:在創(chuàng)建的同時(shí)必須初始化,即到一個(gè)有效的對(duì)象,而指針在定義的時(shí)候不必初始化,可以在定義后面的任何地方重新賦值。(2)不存在 NULL,必須與合法的單元關(guān)聯(lián);而指針則可以是 NULL。(3)一
11、旦被初始化為指向一個(gè)對(duì)象,它就不能被改變?yōu)榱硪粋€(gè)對(duì)象的;而指針在任何時(shí)候都可以改變?yōu)橹赶蛄硪粋€(gè)對(duì)象。給關(guān)系。賦值并不是改變它和原始對(duì)象的綁定(4)的創(chuàng)建和銷毀并調(diào)用類的拷貝構(gòu)造函數(shù)。(5)語(yǔ)言層面,的用法和對(duì)象一樣。在二進(jìn)制層面,一般都是通過(guò)指針來(lái)實(shí)現(xiàn)的,只不過(guò)編譯器幫我們完成了轉(zhuǎn)換。不存在空,并且一旦被初始化為指向一個(gè)對(duì)象,它就不能被改變?yōu)榱硪粋€(gè)對(duì)象,顯得很安全。const 指針仍然存在空指針,并且有可能產(chǎn)生野指針??偟膩?lái)說(shuō),既具有指針的效率,又具有變量使用的方便性和直觀性。·240·struct S;union S;/錯(cuò)誤:C2011/ C2005.cpp int ma
12、in()int i = 0;#line i / C2005/ try ./ #line 0printf("Hello,nworld"); printf("Hello,n""world");printf("Hello,""nworld");第 18 章 文字解答實(shí)戰(zhàn)題面試題 203參數(shù)傳遞的方式與多態(tài)參數(shù)傳遞的實(shí)現(xiàn)(摩托羅拉面試題)【分析與】參數(shù)傳遞有傳值,傳指針或者等 3 種,下面作詳細(xì)介紹。qq傳值方式適合一般數(shù)值傳送,并且不改變?cè)瓟?shù)據(jù),但要消耗內(nèi)存空間;傳指針?lè)绞竭m合傳遞數(shù)組、指針,由于傳遞
13、的是地址,所以直接操作會(huì)改變?cè)?數(shù)據(jù);q指針比較類似,是相對(duì)比較新的式。一般情況下能用傳址的就能用,而且使用更方便一點(diǎn)?;A(chǔ)好的 C/C+程序員應(yīng)該明白,實(shí)現(xiàn)多態(tài)主要采用和指針。傳值這種方式是復(fù)制數(shù)據(jù),其類型編譯器就已決定,而多態(tài)是類型要等到執(zhí)行期才能決定,所以不使用傳值方式來(lái)實(shí)現(xiàn)多態(tài)參數(shù)傳遞。面試題 204怎樣應(yīng)用設(shè)計(jì)模式的理念【分析與設(shè)計(jì)模式】考慮的是擴(kuò)展和重用,而這兩方面在很多情況下,往往會(huì)被忽略。面試官主要對(duì)應(yīng)聘者未來(lái)的發(fā)展前景考慮,通過(guò)本題了解應(yīng)聘者對(duì)系統(tǒng)分析、整體架構(gòu)設(shè)計(jì)方面的經(jīng)驗(yàn)。雖然設(shè)計(jì)模式非常關(guān)鍵,不過(guò)也不建議程序員不建議用設(shè)計(jì)模式可能使得簡(jiǎn)單問(wèn)題變得復(fù)雜化。設(shè)計(jì)模式,因?yàn)椴?/p>
14、合適的使面試題 205介紹一下對(duì)設(shè)計(jì)模式的理解【分析與】設(shè)計(jì)模式概念是由設(shè)計(jì)師 Christopher Alexander 提出:“每一個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的次地使用該方案而不必做重復(fù)勞動(dòng)。”上述定義是對(duì)設(shè)計(jì)模式的向?qū)ο筌浖念I(lǐng)域內(nèi),就形成了對(duì)設(shè)計(jì)模式的狹義定義。這樣,你就能一次又一義。將其應(yīng)用到面可以簡(jiǎn)單的認(rèn)為:設(shè)計(jì)模式就是解決某個(gè)特定的面向?qū)ο筌浖?wèn)題的特定方法,并且已經(jīng)上升到理論程度。下面是框架與設(shè)計(jì)模式的區(qū)別:(1)設(shè)計(jì)模式和框架對(duì)特定業(yè)務(wù)的問(wèn)題域。的問(wèn)題域不同。設(shè)計(jì)模式面向?qū)ο蟮膯?wèn)題域就是框架針(2) 設(shè)計(jì)模式比框架更為抽象。設(shè)計(jì)模式在碰
15、到具體問(wèn)題后,才能產(chǎn)生代碼;框架已經(jīng)可以用代碼表示。(3) 設(shè)計(jì)模式是比框架更小的體系結(jié)構(gòu)元素??蚣苤锌梢园ǘ鄠€(gè)設(shè)計(jì)模式。例如,設(shè)計(jì)模式就像武術(shù)中基本的招式。將這些招式合理地縱組合起來(lái),就形成套路(框架)??蚣芫褪且环N半成品。·241·第 4 篇 C/C+面試題實(shí)戰(zhàn)面試題 206C+和 C 定義結(jié)構(gòu)的區(qū)別是什么(摩托羅拉筆試題)【分析與】C 語(yǔ)言中的結(jié)構(gòu)僅僅是數(shù)據(jù)的結(jié)合,C 語(yǔ)言中的結(jié)構(gòu)體內(nèi)是不能函數(shù)的。面試官要的就是應(yīng)聘者對(duì)這兩種語(yǔ)言基礎(chǔ)的了解。C+中的結(jié)構(gòu)和類其實(shí)具備幾乎一樣的功能,結(jié)構(gòu)體內(nèi)也可以函數(shù)。C+的結(jié)構(gòu)和類默認(rèn)具有不一樣的屬性。面試題 207關(guān)于構(gòu)造函數(shù)和析
16、構(gòu)函數(shù)構(gòu)造函數(shù)可否是虛函數(shù)?為什么?析構(gòu)函數(shù)呢?析構(gòu)函數(shù)可否是純虛的呢?【分析與】這是初學(xué)者容易的問(wèn)題。構(gòu)造函數(shù)不能為虛函數(shù),要構(gòu)造一個(gè)對(duì)象,必須清楚地知道要構(gòu)造什么,否則無(wú)法構(gòu)造一個(gè)對(duì)象。析構(gòu)函數(shù)可以是虛函數(shù),也可以是純虛函數(shù)。面試題 208對(duì)拷貝構(gòu)造函數(shù)的深拷貝、淺拷貝和臨時(shí)對(duì)象的理解【分析與】應(yīng)聘者對(duì)于基礎(chǔ)知識(shí)的了解。深拷貝意味著拷貝了和指針,而淺拷貝只是拷,造成對(duì)同一份析構(gòu)兩次,貝了指針,沒(méi)有拷貝。這樣會(huì)使得兩個(gè)指針指向同一份程序。臨時(shí)對(duì)象的開(kāi)銷比局部對(duì)象小些。面試題 209基類中有一個(gè)虛函數(shù),子類還需要申明為 virtual 嗎【分析與】這種情況下不申明為 virtual 是沒(méi)有關(guān)系
17、的。不過(guò),很多程序員也會(huì)喜歡使用顯式申明,這樣可以使得代碼更加清晰,增強(qiáng)可讀性。面試官主要的其實(shí)是程序員對(duì)于基礎(chǔ)知識(shí)的了解,能說(shuō)出正確的,就說(shuō)明基礎(chǔ)比較扎實(shí)。面試題 210C+的類有什么優(yōu)點(diǎn)C+可以通過(guò)精心僅為了實(shí)現(xiàn)重用?某些函數(shù)功能實(shí)現(xiàn)重用,那 C+的類有什么優(yōu)點(diǎn)嗎?是不是僅【分析與】并不僅僅是為了實(shí)現(xiàn)重用。(Object Oriented Design,簡(jiǎn)稱 OOD 即面向?qū)ο螅┖停∣bject Oriented Programming,簡(jiǎn)稱 OOP 即面向?qū)ο蟮某绦蛟O(shè)計(jì))從根本上改變了程序設(shè)計(jì)模式和設(shè)計(jì)思想,具備深遠(yuǎn)的意義。和·242·第 18 章 文字解答實(shí)戰(zhàn)題類的
18、 3 大最基本的特征:,繼承和多態(tài)。這些特征將編程模型從面向過(guò)程轉(zhuǎn)變?yōu)槊嫦驅(qū)ο?,從根本上改變了編?xiě)程序的思路和模式。本題應(yīng)聘者對(duì)于面向?qū)ο蠛徒?jīng)驗(yàn)。面試題 211如何實(shí)現(xiàn)多態(tài)?父類和子類的繼承關(guān)系如何【分析與】多態(tài)的基礎(chǔ)是繼承,需要虛函數(shù)的支持,C+中多態(tài)有下面 3 種實(shí)現(xiàn)方式:qqq使用函數(shù)重載; 使用模板函數(shù);使用虛函數(shù)。子類繼承父類的大部分。不能繼承的有構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、operator=函數(shù)、函數(shù)等。面試題 212為什么要引入抽象基類和純虛函數(shù)(摩托羅拉筆試題)【分析與】主要目的是為了實(shí)現(xiàn)一種接口的效果。在面向?qū)ο蟮木幊陶Z(yǔ)言中,為了更好的表示客觀世界。所以有些類可以什么都
19、不實(shí)現(xiàn)只是提供一個(gè)共享的接口。這就是純虛函數(shù),而含有純虛函數(shù)的基類即為抽象基類。面試題 213介紹一下模板和容器,如何實(shí)現(xiàn)【分析與】模板可以說(shuō)比較古老了,但是當(dāng)前使用的泛型編程實(shí)質(zhì)上就是模板編程。它體現(xiàn)了一種通用和泛化的思想。本題的就是模板的基礎(chǔ)知識(shí)。STL 有 7 種主要容器:vector、list、deque、map、multimap、set 和 multiset。面試題 214什么是 MVC?簡(jiǎn)單舉例說(shuō)明其應(yīng)用【分析與】MVC 模式是 Observer 模式的一個(gè)特例,典型的有 MFC 中的文檔視圖架構(gòu)。本題應(yīng)聘者對(duì)于設(shè)計(jì)模式的了解,對(duì)于先進(jìn)流行框架的學(xué)習(xí)程度。面試題 215列舉幾種進(jìn)程
20、的同步機(jī)制(面試題)【分析與】原子操作、信號(hào)量機(jī)制、自旋鎖、管程、會(huì)合、分布式系統(tǒng)。本題對(duì)于進(jìn)程基礎(chǔ)知識(shí)的深入理解程度,同時(shí)要求應(yīng)聘者一定要知道什么是同步,同步的原理是什么。·243·第 4 篇 C/C+面試題實(shí)戰(zhàn)面試題 216進(jìn)程之間通信的途徑【分析與】本題進(jìn)程之間通信的途徑主要有以下 3 種:qqq共享系統(tǒng);消息傳遞系統(tǒng);:以文件系統(tǒng)為基礎(chǔ)。面試題 217進(jìn)程死鎖的【分析與】死鎖是指在兩個(gè)或多個(gè)并發(fā)進(jìn)程中,如果每個(gè)進(jìn)程持有某種而又都等待別的進(jìn)程它們現(xiàn)在保持著的,否則就不能向前推進(jìn)。此時(shí),每個(gè)進(jìn)程都占用了一定的但是又不能向前推進(jìn),稱這一組進(jìn)程產(chǎn)生了死鎖。簡(jiǎn)單地說(shuō),就是兩個(gè)
21、或多個(gè)進(jìn)程無(wú)止境的等候著,永遠(yuǎn)成立的條件的一種系統(tǒng)狀態(tài)。產(chǎn)生死鎖的根本如下。是系統(tǒng)能夠提供的個(gè)數(shù)比要求該的進(jìn)程數(shù)少,具體q 系統(tǒng)不足;q 進(jìn)程推進(jìn)順序。面試題 218死鎖的 4 個(gè)必要條件【分析與】如果應(yīng)聘者能完整的回答此題,則顯示出他對(duì)基礎(chǔ)知識(shí)的熟練程度。(1)互斥條件:一個(gè)每次只能被一個(gè)進(jìn)程使用。(2)請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求而阻塞時(shí),對(duì)已獲得的保持不放。 關(guān)系。(3)不條件:進(jìn)程已獲得的,在沒(méi)使用完之前,不能強(qiáng)行(4)循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待面試題 219死鎖的處理【分析與】知道如何發(fā)現(xiàn)問(wèn)題,如何解決問(wèn)題是一個(gè)程序員必須面對(duì)的任務(wù)。本題何處理常見(jiàn)的死鎖問(wèn)
22、題,具體有以下幾個(gè)方面:(1) 鴕鳥(niǎo)算法忽略該問(wèn)題。(2) 檢測(cè)死鎖并且恢復(fù)。應(yīng)聘者如(3)仔細(xì)地對(duì)進(jìn)行動(dòng)態(tài)分配,以避免死鎖。(4)通過(guò)破壞死鎖產(chǎn)生的 4 個(gè)必要條件之一,來(lái)防止死鎖產(chǎn)生。·244·第 18 章 文字解答實(shí)戰(zhàn)題面試題 220操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種【分析與】在考慮這個(gè)問(wèn)題時(shí),首先要考慮操作系統(tǒng),如果不確定,先要詢問(wèn)面試官,是 Windows系統(tǒng)還是 Linux 系統(tǒng)。如果這兩種操作系統(tǒng)應(yīng)聘者都很熟悉,則直接可以說(shuō)出這兩個(gè)系統(tǒng)的區(qū)別和進(jìn)程調(diào)度的策略,詳細(xì)如下:FCFS(先來(lái)先服務(wù))、優(yōu)先級(jí)、時(shí)間片輪轉(zhuǎn)和多級(jí)反饋。面試題 221類的靜態(tài)成員和非靜態(tài)成員有何
23、區(qū)別【分析與】靜態(tài)變量使用 static 修飾符進(jìn)行,在類被實(shí)例化時(shí)創(chuàng)建,通過(guò)類進(jìn)行不帶有static 修飾符的變量稱做非靜態(tài)變量。在對(duì)象被實(shí)例化時(shí)創(chuàng)建,通過(guò)對(duì)象進(jìn)行一個(gè)類的所有實(shí)例的同一靜態(tài)變量都是同一個(gè)值,同一個(gè)類的不同實(shí)例的同一非靜態(tài)變量可以是不同的值。靜態(tài)函數(shù)的實(shí)現(xiàn)里不能使用非靜態(tài)成員,例如非靜態(tài)變量、非靜態(tài)函數(shù)等。類的靜態(tài)成員每個(gè)類只有一個(gè),非靜態(tài)成員每個(gè)對(duì)象一個(gè)。本題識(shí)的把握程度。應(yīng)聘者對(duì)基礎(chǔ)知面試題 222純虛函數(shù)如何定義?使用時(shí)應(yīng)注意什么【分析與】定義方式如下:virtual void f()=0;必須要實(shí)現(xiàn)該接口。在 C/C+語(yǔ)言中,純虛函數(shù)的應(yīng)此函數(shù)是一個(gè)接口,子類用非常廣
24、泛,它如何定義和注意事項(xiàng),是對(duì)基礎(chǔ)知識(shí)的一種考量。面試題 223數(shù)組和鏈表的區(qū)別【分析與本題】C/C+語(yǔ)言的基礎(chǔ)知識(shí),應(yīng)聘者應(yīng)該了解數(shù)組和鏈表的概念和定義,然后才能具體的區(qū)別它們,詳細(xì)如下。q 數(shù)組:數(shù)據(jù)順序,固定大?。籷 鏈表:數(shù)據(jù)可以隨機(jī),大小可動(dòng)態(tài)改變。面試題 224關(guān)于 ISO 七層模型的典型問(wèn)題ISO 的七層模型是什么?TCP/UDP 是屬于哪一層?TCP/UDP 有何優(yōu)缺點(diǎn)?【分析與】ISO 的七層模型主要包括:應(yīng)用層、表示層、會(huì)話層、層、網(wǎng)絡(luò)層、物理鏈路層、·245·第 4 篇 C/C+面試題實(shí)戰(zhàn)物理層。TCP/UDP 屬于傳輸層。TCP 服務(wù)提供了數(shù)據(jù)流傳輸
25、、可靠性、有效流、全雙工操作和多路復(fù)用技術(shù)等。與 TCP 不同,UDP 并不提供對(duì) IP 協(xié)議的可靠機(jī)制、流以及錯(cuò)誤恢復(fù)功能等。由于 UDP 比較簡(jiǎn)單,所以它的頭部信息包含很少的字節(jié),比 TCP 負(fù)載消耗少。q TCP:提供穩(wěn)定的傳輸服務(wù),有流量,缺點(diǎn)是包頭大,冗余性不好。q UDP:不提供穩(wěn)定的服務(wù),包頭部信息少,開(kāi)銷小。面試題 225內(nèi)存的分配方式及其區(qū)別【分析與】對(duì)于 C/C+語(yǔ)言,因?yàn)槎嗍情_(kāi)發(fā)操作系統(tǒng)的底層技術(shù),所以內(nèi)存分配非常關(guān)鍵。下面從多方面解釋內(nèi)存分配方式:(1)從靜態(tài)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如,全局變量和 static
26、變量。(2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些單元自動(dòng)被。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。(3)從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候使用 malloc 或 new 申請(qǐng)任意多少的內(nèi)存,程序員負(fù)責(zé)在何時(shí)用 free 或 delete內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問(wèn)題也最多。面試題 226struct 和 class 的區(qū)別【分析與】struct 的成員默認(rèn)是公有的,而類的成員默認(rèn)是私有的。struct 和 class 在其他方面是功能相當(dāng)?shù)?。從?xí)慣上來(lái)講,大多數(shù)的開(kāi)發(fā)者感到類和結(jié)構(gòu)有很大的差別。感覺(jué)上結(jié)構(gòu)僅僅像一
27、堆缺乏和功能的開(kāi)放的內(nèi)存位,而類就像活的并且可靠的成員,它有智能服務(wù),有牢固的屏障和一個(gè)良好的定義接口。既然大多數(shù)人都這么認(rèn)為,那么只有在程序員的類有很少的方法并且有公有數(shù)據(jù)(這種事情在良好設(shè)計(jì)的系統(tǒng)中是存在的)時(shí),也許應(yīng)該使用 struct 關(guān)鍵字,否則,應(yīng)該使用 class 關(guān)鍵字。面試題 227一個(gè)類所占內(nèi)存空間的問(wèn)題(Autodesk 面試題改編)當(dāng)一個(gè)類 A 中沒(méi)有任何成員變量與成員函數(shù)時(shí),sizeof(A)的值是否可以為 0?請(qǐng)解釋一下編譯器為什么沒(méi)有讓它為 0?!痉治雠c】肯定不是 0。舉個(gè)反例,如果是 0 的話,一個(gè) class A10對(duì)象數(shù)組,而每一個(gè)對(duì)象占用的內(nèi)存空間是 0,
28、這時(shí)就沒(méi)辦法區(qū)分 A0,A1了。這是一個(gè)最簡(jiǎn)單的例子,本例的就是應(yīng)聘者的反應(yīng)能力和考慮問(wèn)題的多面性。·246·第 18 章 文字解答實(shí)戰(zhàn)題面試題 228在 8086 匯編中,邏輯地址和物理地址如何轉(zhuǎn)換(Intel 面試題)【分析與】首先要明白,為什么特指在 8086 匯編下?因?yàn)?C 語(yǔ)言能編譯成 8086 匯編語(yǔ)言。本題范圍比較寬廣,需要應(yīng)聘者對(duì)匯編語(yǔ)言有一定的了解。通用寄存器給出的地址,是偏移地址,相應(yīng)段寄存器地址*10H+通用寄存器內(nèi)地址,就得到了真正要的地址。面試題 229比較 C+中的 4 種類型轉(zhuǎn)換方式【分析與】C+同時(shí)提供了 4 種新的強(qiáng)制形式(通常稱為新風(fēng)格
29、的或 C+風(fēng)格的強(qiáng)制):const_cast(expression)、dynamic_cast(expression)、reinterpret_cast(expression) 和 static_cast (expression),每一種都適用于特定的目的,具體如下:(1)dynamic_cast 主要用于執(zhí)行“安全的向下(safe downcasting)”,也就是說(shuō),要確定一個(gè)對(duì)象是否是一個(gè)繼承體系中的一個(gè)特定類型。它是唯一不能用舊風(fēng)格語(yǔ)法執(zhí)行的強(qiáng)制,也是唯一可能有運(yùn)行價(jià)的強(qiáng)制。(2)static_cast 可以被用于強(qiáng)制隱型轉(zhuǎn)換(例如,non-const 對(duì)象為 const 對(duì)象,int
30、為 double,等等),它還可以用于很多這樣的轉(zhuǎn)換的反向轉(zhuǎn)換(例如,void*指針為有類型指針,基類指針為派生類指針),但是它不能將一個(gè)const 對(duì)象對(duì)象(只有 const_cast 能做到),它最接近于 C-style 的轉(zhuǎn)換。為non-const(3)const_cast 一般用于強(qiáng)制消除對(duì)象的常量性。它是唯一能做到這一點(diǎn)的 C+風(fēng)格的強(qiáng)制。(4)reinterpret_cast 是特意用于底層的強(qiáng)制,導(dǎo)致實(shí)現(xiàn)依賴( implementation-dependent)(就是說(shuō),不可移植)的結(jié)果,例如,將一個(gè)指針制在底層代碼以外應(yīng)該極為罕見(jiàn)。為一個(gè)整數(shù)。這樣的強(qiáng)舊風(fēng)格的強(qiáng)制依然合法,但是
31、新的形式更可取。首先,在代碼中它們更容易識(shí)別(無(wú)論是人還是像 grep 這樣的工具都是如此),這樣就簡(jiǎn)化了在代碼中尋找類型系統(tǒng)被破壞的地方的過(guò)程。其次,更精確地指定每一個(gè)強(qiáng)制的目的,使得編譯器診斷使用錯(cuò)誤成為可能。例如,試圖使用一個(gè) const_cast 以外的新風(fēng)格強(qiáng)制無(wú)法編譯。來(lái)消除常量性,代碼將面試題 230面向?qū)ο蟮?3 個(gè)基本特征是什么【分析與】應(yīng)聘者對(duì)于面向?qū)ο蠹夹g(shù)的了解,下面是簡(jiǎn)述:將客觀事物抽象成類,每個(gè)類對(duì)自身的數(shù)據(jù)和方法實(shí)行 protection(private,(1)protected,public)。(2)繼承:廣義的繼承有 3 種實(shí)現(xiàn)形式:實(shí)現(xiàn)繼承(指使用基類的屬性和
32、方法而無(wú)需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實(shí)現(xiàn)代碼)、接口繼承(僅使·247·第 4 篇 C/C+面試題實(shí)戰(zhàn)用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn))。前兩種(類繼承)和后一種(對(duì)象組合=>接口繼承以及純虛函數(shù))了功能復(fù)用的兩種方式。(3)多態(tài):是將父對(duì)象設(shè)置成為和一個(gè)或的它的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式將子類類型的指針賦值給父類類型的指針。簡(jiǎn)單地說(shuō),就是面試題 231重載(overload)和重寫(xiě)(overried)的區(qū)別【分析與】這是一個(gè)經(jīng)常會(huì)考到的題目,從定義上來(lái)說(shuō)具有以下兩個(gè)方面:(1)重載:是
33、指存在多個(gè)同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個(gè)數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。(2)重寫(xiě):是指子類重新定義復(fù)類虛函數(shù)的方法。從實(shí)現(xiàn)原理上來(lái)說(shuō):(1)重載:編譯器根據(jù)函數(shù)不同的參數(shù)表,對(duì)同名函數(shù)的名稱做修飾,然后這些同名函數(shù)就成了不同的函數(shù)(至少對(duì)于編譯器來(lái)說(shuō)是這樣的)。例如,下面的代碼有兩個(gè)同名函數(shù):function func(p:integer):integer;和function func(p:string):integer;那么編譯器做過(guò)修飾后的函數(shù)名稱可能是這樣的:int_func、str_func。對(duì)于這兩個(gè)函數(shù)的調(diào)用,在編譯器間就已經(jīng)確定了,是靜態(tài)的。也就是說(shuō),
34、它們的地址在編譯期就已經(jīng)綁定了(早綁定),因此,重載和多態(tài)是沒(méi)有關(guān)系的。(2)重寫(xiě):和多態(tài)真正相關(guān)。當(dāng)子類重新定義了父類的虛函數(shù)后,父類指針根據(jù)賦給它的不同的子類指針,動(dòng)態(tài)的調(diào)用屬于子類的該函數(shù),這樣的函數(shù)調(diào)用在編譯期間是無(wú)法確定的(調(diào)用的子類的虛函數(shù)的地址無(wú)法給出)。因此,這樣的函數(shù)地址是在運(yùn)行期綁定的(晚綁定)。面試題 232多態(tài)的作用【分析與】多態(tài)是面向?qū)ο箝_(kāi)發(fā)的一個(gè)特色,其作用主要是以下兩個(gè)。q 隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼能夠模塊化;擴(kuò)展代碼模塊,實(shí)現(xiàn)代碼重用。q 接口重用:為了類在繼承和派生的時(shí)候,保證使用性時(shí)的正確調(diào)用。中任一類的實(shí)例的某一屬面試題 233ADO 與 ADO.NET 有
35、何異同【分析與】除了能夠讓?xiě)?yīng)用程序處理于 DBMS 數(shù)據(jù)庫(kù)中的數(shù)據(jù)這一基本相似點(diǎn)外,兩者沒(méi)有·248·第 18 章 文字解答實(shí)戰(zhàn)題太多共同之處。但是 ADO 使用 OLE DB 接口并基于微軟的 COM 技術(shù),而 ADO.NET 擁有的 ADO.NET 接口并且基于微軟的.NET 體系架構(gòu)。眾所周知.NET 體系不同于 COM 體系,ADO.NET 接口也就完全不同于 ADO 和 OLE DB 接口,這也就是說(shuō) ADO.NET 和 ADO是兩種數(shù)據(jù)方式。ADO.NET 提供對(duì) XML 的支持。面試題 234New delete 與 malloc free 有何與區(qū)別【分析與
36、】C/C+軟件工程師在面試的時(shí)候內(nèi)存的特別的多,這是程序安全開(kāi)發(fā)的關(guān)鍵。本題題干中,這兩者都是在堆(heap)上進(jìn)行動(dòng)態(tài)的內(nèi)存操作。使用 malloc 函數(shù)需要指定內(nèi)存分配的字節(jié)數(shù)并且不能初始化對(duì)象,New 會(huì)自動(dòng)調(diào)用對(duì)象的構(gòu)造函數(shù)。delete 會(huì)調(diào)用對(duì)象的 destructor,而 free調(diào)用對(duì)象的 destructor.面試題 235#define DOUBLE(x) x+x,i = 5*DOUBLE(5),求 i【分析與本題主要】函數(shù)的宏定義,例如,#define DOUBLE(x) x+x 就是函數(shù)的宏定義。把宏定義展開(kāi)就能計(jì)算正確的結(jié)果。將其展開(kāi):i= 5*6 + 6 = 30。
37、所以,i 為 30。面試題 236哪幾種情況只能用 intialization list 而不能用 assignment【分析與】當(dāng)類中含有 const 和 reference 等成員變量時(shí),基類的構(gòu)造函數(shù)都需要初始化表。本題主要就是初始化關(guān)鍵字,這是 C+中非?;A(chǔ)又非常關(guān)鍵的技術(shù)點(diǎn)。面試題 237C+是不是類型安全的【分析與】不是。兩個(gè)不同類型的指針之間可以強(qiáng)制轉(zhuǎn)換(用 reinterpret cast)?;卮鸨绢}時(shí),可以先說(shuō)清楚什么是類型安全,然后解釋類型安全的必要性,最后回答結(jié)果。當(dāng)然如果能很干脆地給出結(jié)果,也說(shuō)明了應(yīng)聘者基礎(chǔ)還比較扎實(shí),對(duì)待問(wèn)題的處理不拖泥帶水。面試題 238main
38、()函數(shù)執(zhí)行前還會(huì)執(zhí)行什么代碼【分析與】全局對(duì)象的構(gòu)造函數(shù)會(huì)在 main()函數(shù)之前執(zhí)行。筆者曾經(jīng)在 MSN 上應(yīng)聘一個(gè)的工作,當(dāng)初方面給的所有的題都是一些包含多個(gè)構(gòu)造函數(shù)的對(duì)象,的主·249·第 4 篇 C/C+面試題實(shí)戰(zhàn)要內(nèi)容就是每個(gè)構(gòu)造函數(shù)執(zhí)行的先后順序。外企公司特別注意這種題型,而初學(xué)者經(jīng)常在這方面有點(diǎn)。通過(guò)此題也希望讀者能深化面向?qū)ο蟮闹R(shí)。面試題 239static 有什么用途(至少說(shuō)明兩種)【分析與】靜態(tài)變量的類型說(shuō)明符是 static。靜態(tài)變量當(dāng)然是屬于靜態(tài)儲(chǔ)方式的變量不一定就是靜態(tài)變量。例如,外部變量雖屬于靜態(tài)方式,但是屬于靜態(tài)存方式,但不一定是靜態(tài)變量,
39、必須由 static 加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量。通過(guò)上述概念的了解,可以知道 static 的主要用途有以下兩個(gè):q 限制變量的作用域;q 設(shè)置變量的域。面試題 240描述實(shí)時(shí)系統(tǒng)的基本特性【分析與】實(shí)時(shí)系統(tǒng)的特性就是在特定時(shí)間內(nèi)完成特定的任務(wù)、實(shí)時(shí)性與可靠性。本題其實(shí)的是應(yīng)聘者對(duì)于實(shí)時(shí)系統(tǒng)的了解程度。除了解外,還要知道它與 C 語(yǔ)言的關(guān)系。面試題 241全局變量和局部變量在內(nèi)存中是否有區(qū)別?說(shuō)明【分析與】有區(qū)別。全局變量在靜態(tài)數(shù)據(jù)區(qū),局部變量在堆棧中。本題一看就知道的是基礎(chǔ)知識(shí),了解什么是全局變量,什么是局部變量。既然名字不同,那肯定有一定的區(qū)別。如果這類問(wèn)題不上來(lái),
40、那應(yīng)聘者應(yīng)該把一本 C 語(yǔ)言入門(mén)書(shū)從頭到尾再讀一遍。面試題 242什么是平衡二叉樹(shù)【分析與】二叉樹(shù)是每個(gè)結(jié)點(diǎn)最多有兩個(gè)子樹(shù)的有序樹(shù)。通常子樹(shù)的根被稱作左子樹(shù)(left subtree) 和右子樹(shù)(right subtree)。應(yīng)聘者應(yīng)先了解什么是二叉樹(shù),再去說(shuō)明什么是平衡二叉樹(shù)。平衡二叉樹(shù)的左右子樹(shù)都是平衡二叉樹(shù),且左右子樹(shù)的深度差值的絕對(duì)值不大于 1。面試題 243定義 int *a34,則變量占用的內(nèi)存空間為多少【分析與】還是常見(jiàn)的對(duì) C 語(yǔ)言的內(nèi)存如下:,回答占用內(nèi)存空間應(yīng)該考慮 16 位和 32 位的問(wèn)題,在 int *p; /*16 位下 sizeof(p)=2,32 位下 size
41、of(p)=4*/,總共 3*4*sizeof(p)。·250·第 18 章 文字解答實(shí)戰(zhàn)題面試題 244堆棧溢出一般是由什么導(dǎo)致的【分析與】堆棧溢出一般是循環(huán)的遞歸調(diào)用導(dǎo)致的。如果使用的大數(shù)據(jù)結(jié)構(gòu)的局部變量,也可能導(dǎo)致堆棧溢出。沒(méi)有回收會(huì)導(dǎo)致內(nèi)存泄露最后耗盡系統(tǒng)內(nèi)存。如果這個(gè)問(wèn)題說(shuō)的很清楚,則應(yīng)聘者在安全開(kāi)發(fā)方面是比較在意的,面試官要的就是 C/C+語(yǔ)言開(kāi)發(fā)的安全問(wèn)題。面試題 245什么函數(shù)不能為虛函數(shù)【分析與】構(gòu)造函數(shù)不能為虛函數(shù),如下:(1)所謂虛函數(shù)就是多態(tài)情況下只執(zhí)行一個(gè),而從繼承的概念來(lái)講,總是要先構(gòu)造父類對(duì)象,然后才能是子類對(duì)象。如果構(gòu)造函數(shù)設(shè)為虛函數(shù),那么當(dāng)
42、在構(gòu)造父類的構(gòu)造函數(shù)時(shí)就不得不顯示的調(diào)用構(gòu)造。還有一個(gè)就是為了防錯(cuò),試想如果在子類中一不重寫(xiě)了一個(gè)與父類構(gòu)造函數(shù)一樣的函數(shù),那么父類的構(gòu)造函數(shù)將被覆蓋,這樣的話既不能完成父類的構(gòu)造也會(huì)出錯(cuò)。(2)虛函數(shù)的主要意義在于被派生類繼承從而產(chǎn)生多態(tài)。派生類的構(gòu)造函數(shù)中,編譯器會(huì)加入構(gòu)造基類的代碼,如果基類的構(gòu)造函數(shù)用到參數(shù),則派生類在其構(gòu)造函數(shù)的初始化列表中必須為基類給出參數(shù)。面試題 246冒泡排序算法的時(shí)間復(fù)雜度是什么【分析與】冒泡排序是這樣實(shí)現(xiàn)的:首先將所有待排序的數(shù)字放入工作列表中。從列表的第一個(gè)數(shù)字到倒數(shù)第二個(gè)數(shù)字,逐個(gè)檢查:若某一位上的數(shù)字大于它的下一位,則將它與它的下一位交換。重復(fù)上述步驟
43、,直至再也不能交換。冒泡排序的平均時(shí)間復(fù)雜度與同,也是平方級(jí)的,但也是非常容易實(shí)現(xiàn)的算法。冒泡排序的時(shí)間復(fù)雜度是:O(n2)。排序相面試題 247寫(xiě)出 float x 與“零值”比較的 if 語(yǔ)句【分析與】x 是一個(gè)變量,被定義為 float,所以在比較時(shí),零值并不是 0,而是以下代碼:if(x>0.000001&&x<-0.000001)一般來(lái)說(shuō),對(duì)于一個(gè)浮點(diǎn)數(shù),只定義了不使用。通常我們都會(huì)對(duì)浮點(diǎn)數(shù)進(jìn)行比較復(fù)雜的運(yùn)算,那么在運(yùn)算的過(guò)程中,就有可能發(fā)生四舍五入的情況。所以,對(duì)于一個(gè)進(jìn)行了一些可能導(dǎo)致四舍五入的運(yùn)算的浮點(diǎn)數(shù)而言,不能保證它的準(zhǔn)確性(當(dāng)然這里的誤差是
44、183;251·第 4 篇 C/C+面試題實(shí)戰(zhàn)非常非常小的)。所以,在對(duì)浮點(diǎn)數(shù)比較的時(shí)候,就需要考慮到這些誤差,方法之一就是,讓浮點(diǎn)數(shù)與一段數(shù)值范圍比較,而不是與一個(gè)確定的數(shù)值比較。面試題 248Internet 采用哪種網(wǎng)絡(luò)協(xié)議?介紹該協(xié)議的主要層次結(jié)構(gòu)【分析與】Internet 采用的是 TCP/IP 協(xié)議。TCP/IP 協(xié)議的主要層次結(jié)構(gòu)為 5 層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層。本題的是網(wǎng)絡(luò)相關(guān)知識(shí),需要對(duì)網(wǎng)絡(luò)的層次結(jié)構(gòu)和協(xié)議有一定的了解。這些內(nèi)容非?;A(chǔ),如果應(yīng)聘網(wǎng)絡(luò)方面的工程師,則這些問(wèn)題必須能回答上來(lái)。面試題 249Internet 物理地址和 IP 地址轉(zhuǎn)
45、換采用什么協(xié)議【分析與】采用 ARP(Address Resolution Protocol)即地址ARP 協(xié)議的基本功能就是通過(guò)目標(biāo)設(shè)備的 IP 地址,協(xié)議。目標(biāo)設(shè)備的 MAC 地址,以保證通信的順利進(jìn)行。地址換成目標(biāo) MAC 地址的過(guò)程。(address resolution)就是主機(jī)在幀前將目標(biāo) IP 地址轉(zhuǎn)面試題 250IP 地址的編碼分為哪兩部分【分析與】IP 地址由兩部分組成:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過(guò)是要和“子網(wǎng)掩碼”按位與上之后,才能區(qū)分哪些是網(wǎng)絡(luò)位哪些是主機(jī)位。本題也是的網(wǎng)絡(luò)相關(guān)知識(shí)。如果是普通的 C/C+工程師,可能這方面的問(wèn)題,專門(mén)做通信或語(yǔ)音等相關(guān)方面的網(wǎng)絡(luò)工程師,本題很常見(jiàn)
46、。面試題 251不能做 switch()的參數(shù)類型是什么數(shù)據(jù)類型【分析與switch(表數(shù)不能為實(shí)型。switch()表】),表可以是整型、字符型以及枚舉類型等表。switch()的參是常見(jiàn)的分支選擇語(yǔ)句,在多條件時(shí)經(jīng)常遇到,為了更好的使用它,一定要了解這方面的知識(shí),本題就是應(yīng)聘者的編程經(jīng)驗(yàn),因?yàn)槿绻憬?jīng)驗(yàn)豐富,則這種編程中常用表的注意事項(xiàng)難不倒應(yīng)聘者。面試題 252盡可能多地說(shuō)出 static 和 const 關(guān)鍵字的作用【分析與】static 關(guān)鍵字至少有下列 n 個(gè)作用:·252·第 18 章 文字解答實(shí)戰(zhàn)題(1)函數(shù)體內(nèi) static 變量的作用范圍為該函數(shù)體,不同
47、于 auto 變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值。(2)在模塊內(nèi)的 static 全局變量可以被模塊內(nèi)所用函數(shù)數(shù)。,但不能被模塊外其他函(3)在模塊內(nèi)的 static 函數(shù)只可以被這一模塊內(nèi)的其他函數(shù)調(diào)用。這個(gè)函數(shù)的使用范圍被限制在它的模塊內(nèi)。(4) 在類中的 static 成員變量屬于整個(gè)類所擁有,對(duì)類的所有對(duì)象只有一份拷貝。(5) 在類中的 static 成員函數(shù)屬于整個(gè)類所擁有,這個(gè)函數(shù)不接收 this 指針,因而只能類的 static 成員變量。const 關(guān)鍵字至少有下列 n 個(gè)作用:(1)欲一個(gè)變量被改變,可以使用 const 關(guān)鍵字。在定義該 co
48、nst 變量時(shí),通常需要對(duì)它進(jìn)行初始化,因?yàn)橐院缶蜎](méi)有機(jī)會(huì)再去改變它了。(2)對(duì)指針來(lái)說(shuō),可以指定指針本身為 const;也可以指定指針?biāo)傅臄?shù)據(jù)為 const, 或二者同時(shí)指定為 const。(3)在一個(gè)函數(shù)能改變其值。中,const 可以修飾形參,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不(4) 對(duì)于類的成員函數(shù),若指定其為 const 類型,則表明其是一個(gè)常函數(shù),不能修改類的成員變量。(5) 對(duì)于類的成員函數(shù),有時(shí)候必須指定其返回值為 const 類型,以使得其返回值不為“”,例如下面的代碼:const classA operator*(const classA& a1,const cl
49、assA& a2);operator*的返回結(jié)果必須是一個(gè) const 對(duì)象。如果不是,這樣的代碼也編譯出錯(cuò):操作(a * b) = c 顯然不符合編程者的初衷,也沒(méi)有任何意義。%注意:看到上面的代碼,讀者也許會(huì)覺(jué)得有一點(diǎn)驚訝。很普通的 static 和 const 居然有這么多功能,這個(gè)題可以考查面試者對(duì)程序設(shè)計(jì)知識(shí)的掌握程度是初級(jí)、中級(jí)還是比較深入,如果沒(méi)有一定的知識(shí)廣度和深度,不可能對(duì)這個(gè)問(wèn)題給出全面地解答。大多數(shù)人只能回答出 static 和 const 關(guān)鍵字的部分功能。面試題 253什么是預(yù)編譯【分析與】預(yù)編譯就是處理#開(kāi)頭的指令。例如,拷貝#include 包含的文件代碼
50、,#define 宏定義的替換和條件編譯等。預(yù)編譯就是為編譯做的預(yù)備工作的階段,主要處理#開(kāi)始的預(yù)編譯指令。預(yù)編譯指令指示了在程序正式編譯前就由編譯器進(jìn)行的操作,可以放在位置。何時(shí)需要預(yù)編譯,具體如下:的任何·253·classA a, b, c;(a * b) = c;/對(duì) a*b 的結(jié)果賦值第 4 篇 C/C+面試題實(shí)戰(zhàn)(1)總是使用不經(jīng)常改動(dòng)的大型代碼體。(2)多個(gè)模塊組成,所有模塊都使用一組標(biāo)準(zhǔn)的包含文件和相同的編譯選項(xiàng)。在這種情況下,可以將所有包含文件預(yù)編譯為一個(gè)預(yù)編譯頭。面試題 254寫(xiě)一個(gè),使其輸入兩個(gè)參數(shù),返回較小的一個(gè)【分析與本題就是】宏定義,注意最后沒(méi)有
51、分號(hào)結(jié)尾。詳細(xì)代碼如下:.#define Min(X, Y) (X)>(Y)?(Y):(X) /結(jié)尾沒(méi)有;面試題 255系統(tǒng)中如何用 C 語(yǔ)言編寫(xiě)死循環(huán)【分析與】如果不是常面試的人可能不知道,題目竟然是要使用 C 語(yǔ)言來(lái)編寫(xiě)死循環(huán),這不是影響程序的進(jìn)行嘛?但筆者面試過(guò)很多公司,這個(gè)問(wèn)題還是非常多見(jiàn)的。因?yàn)轭}目的前提是系統(tǒng)中經(jīng)常遇到無(wú)限循環(huán),也就是我們while(1)或者 for(;)的死循環(huán)。如下:面試題 256int (*s10)(int)表示什么【分析與】學(xué)習(xí) C 語(yǔ)言時(shí),覺(jué)得指針是最基礎(chǔ)卻又最難的一項(xiàng)技術(shù),面試題基本都會(huì)碰到,但一旦學(xué)習(xí)好它,就很容易過(guò)關(guān)。本題的就是數(shù)組指針。int
52、 (*s10)(int)函數(shù)指針數(shù)組,將每個(gè)指針指向一個(gè) int func(int param)的函數(shù)。面試題 257下列表哪些會(huì)被編譯器(面試題)題目:【分析與】指針和變量定義相關(guān)方面的知識(shí),非?;A(chǔ),如下:·254·int a=248; b=4;int const c=21; const int *d=&a; int *const e=&b;int const *f const =&a;*c=32; d=&b;*d=43;e=34;e=&a; f=0x321f;第 18 章 文字解答實(shí)戰(zhàn)題(1)*c 語(yǔ)法錯(cuò)誤,所以。(2)*d 已
53、經(jīng)定義了是 const,所以(3)e = &a 已經(jīng)定義了是 const,所以。(4)const *f const =&a,。面試題 258換兩個(gè)變量的值而不使用第 3 個(gè)變量,即 a=3,b=5,交換之后 a=5,b=3【分析與】有兩種解法:一種是使用算術(shù)算法,另一種是使用(異或)。示例代碼如下:和:面試題 259C 和 C+中的 struct 有什么不同【分析與】在 C 和 C+中,struct 的主要區(qū)別是 C 中的 struct 不可以含有成員函數(shù),而 C+中的struct 可以。在 C+中 struct 和 class 的主要區(qū)別在于默認(rèn)的存取權(quán)限不同,struct
54、默認(rèn)為public,而 class 默認(rèn)為 private。面試題 260如何讓程序跳轉(zhuǎn)到絕對(duì)地址 0x100000 去執(zhí)行要對(duì)絕對(duì)地址 0x100000 賦值,可以用(unsigned int*)0x100000 = 1234。那么如何讓程序跳轉(zhuǎn)到絕對(duì)地址 0x100000 去執(zhí)行?【分析與】 *(void (*)( )0x100000 ) ( );首先要將 0x100000 強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即:(void (*)()0x100000;然后再調(diào)用它,即: *(void (*)()0x100000)();用 typedef 可以看得更直觀些,如下:·255·typedef void(*)() voidFuncPtr;*(voidFuncPtr)0x100000)();a = ab;/ 只能對(duì) int,char. b = ab;a = ab; ora = b = a;a = a + b; b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司訂單交付管理制度
- 公司日常開(kāi)銷管理制度
- 商業(yè)精裝現(xiàn)場(chǎng)管理制度
- 售后電話回訪管理制度
- 公司行政人事管理制度
- 共享汽車運(yùn)營(yíng)管理制度
- 公司間接費(fèi)用管理制度
- 醫(yī)院各項(xiàng)衛(wèi)生管理制度
- 加工貿(mào)易企業(yè)管理制度
- 工廠食堂餐飲管理制度
- 外賣騎手勞務(wù)合同協(xié)議書(shū)
- T/CAMIR 002-2022企業(yè)技術(shù)創(chuàng)新體系建設(shè)、管理與服務(wù)要求
- DB31/T 595-2021冷庫(kù)單位產(chǎn)品能源消耗指標(biāo)
- 第五章 SPSS基本統(tǒng)計(jì)分析課件
- 2025年計(jì)算機(jī)Photoshop操作實(shí)務(wù)的試題及答案
- 2025時(shí)事熱點(diǎn)政治題及參考答案(滿分必刷)
- GB/T 23453-2025天然石灰石建筑板材
- 2024-2030全球WiFi 6移動(dòng)熱點(diǎn)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年廣東省廣州市越秀區(qū)中考物理一模試卷(含答案)
- 砌磚理論考試題及答案
- 2025年高等數(shù)學(xué)期末考試試題及答案
評(píng)論
0/150
提交評(píng)論