不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦>創(chuàng)業(yè)指南>職場>面試題>

C/C++筆試面試題目

時間: 護托1061 分享

  C語言是世界上最流行、使用最廣泛的高級程序設(shè)計語言之一。下面就由學習啦小編為大家介紹一下C/C++ 筆試、面試題目的文章,歡迎閱讀。

  C/C++ 筆試、面試題目篇1

  1. 什么是“引用”?申明和使用“引用”要注意哪些問題?

  答:引用就是某個目標變量的“別名”(alias),對應(yīng)用的操作與對變量直接操作效果完全相同。申明一個引用的時候,切記要對其進行初始化。引用聲明完畢后,相當于目標變量名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數(shù)據(jù)類型,因此引用本身不占存儲單元,系統(tǒng)也不給引用分配存儲單元。不能建立數(shù)組的引用。

  2. 將“引用”作為函數(shù)參數(shù)有哪些特點?

  (1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時,被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實參變量或?qū)ο蟮囊粋€別名來使用,所以在被調(diào)函數(shù)中對形參變量的操作就是對其相應(yīng)的目標對象(在主調(diào)函數(shù)中)的操作。

  (2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數(shù)的參數(shù),當發(fā)生函數(shù)調(diào)用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調(diào)用拷貝構(gòu)造函數(shù)。因此,當參數(shù)傳遞的數(shù)據(jù)較大時,用引用比用一般變量傳遞參數(shù)的效率和所占空間都好。

  (3)使用指針作為函數(shù)的參數(shù)雖然也能達到與使用引用的效果,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲單元,且需要重復(fù)使用"*指針變量名"的形式進行運算,這很容易產(chǎn)生錯誤且程序的閱讀性較差;另一方面,在主調(diào)函數(shù)的調(diào)用點處,必須用變量的地址作為實參。而引用更容易使用,更清晰。

  3 在什么時候需要使用“常引用”?

  如果既要利用引用提高程序的效率,又要保護傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應(yīng)使用常引用。常引用聲明方式:const 類型標識符 &引用名=目標變量名;

  例1

  int a;

  constint&ra = a;

  ra = 1; // 錯誤

  a = 1; // 正確

  例2

  string foo( );

  void bar(string&s)

  // 那么下面的表達式將是非法的:

  bar(foo( ));

  bar("hello world");

  原因在于foo( )和"hello world"串都會產(chǎn)生一個臨時對象,而在C++中,這些臨時對象都是const類型的。因此上面的表達式就是試圖將一個const類型的對象轉(zhuǎn)換為非const類型,這是非法的。

  引用型參數(shù)應(yīng)該在能被定義為const的情況下,盡量定義為const 。

  C/C++ 筆試、面試題目篇2

  1. “引用”與指針的區(qū)別是什么?

  指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。程序中使用指針,程序的可讀性差;

  而引用本身就是目標變量的別名,對引用的操作就是對目標變量的操作。此外,就是上面提到的對函數(shù)傳ref和pointer的區(qū)別。

  2. 什么時候需要“引用”?

  流操作符<<和>>、賦值操作符=的返回值、拷貝構(gòu)造函數(shù)的參數(shù)、賦值操作符=的參數(shù)、其它情況都推薦使用引用。

  3. 結(jié)構(gòu)與聯(lián)合有和區(qū)別?

  1. 結(jié)構(gòu)和聯(lián)合都是由多個不同的數(shù)據(jù)類型成員組成, 但在任何同一時刻, 聯(lián)合中只存放了一個被選中的成員(所有成員共用一塊地址空間), 而結(jié)構(gòu)的所有成員都存在(不同成員的存放地址不同)。

  2. 對于聯(lián)合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結(jié)構(gòu)的不同成員賦值是互不影響的。

  C/C++ 筆試、面試題目篇3

  1. 關(guān)聯(lián)、聚合(Aggregation)以及組合(Composition)的區(qū)別?

  涉及到UML中的一些概念:

  關(guān)聯(lián)是表示兩個類的一般性聯(lián)系,比如“學生”和“老師”就是一種關(guān)聯(lián)關(guān)系;

  聚合表示has-a的關(guān)系,是一種相對松散的關(guān)系,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關(guān)系:

  從實現(xiàn)的角度講,聚合可以表示為:

  class A {...} class B { A* a; .....}

  組合表示contains-a的關(guān)系,關(guān)聯(lián)性強于聚合:組合類與被組合類有相同的生命周期,組合類要對被組合類負責,采用實心的菱形表示組合關(guān)系:

  實現(xiàn)的形式是:

  class A{...} class B{ A a; ...}

  2.面向?qū)ο蟮娜齻€基本特征,并簡單敘述之?

  1. 封裝:將客觀事物抽象成類,每個類對自身的數(shù)據(jù)和方法實行protection(private, protected,public)

  2. 繼承:廣義的繼承有三種實現(xiàn)形式:實現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現(xiàn)代碼)、接口繼承(僅使用屬性和方法,實現(xiàn)滯后到子類實現(xiàn))。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數(shù))構(gòu)成了功能復(fù)用的兩種方式。

  3. 多態(tài):系統(tǒng)能夠在運行時,能夠根據(jù)其類型確定調(diào)用哪個重載的成員函數(shù)的能力,稱為多態(tài)性。(見:C++中類的多態(tài)與虛函數(shù)的使用)

  3. 重載(overload)和重寫(overried,有的書也叫做“覆蓋”)的區(qū)別?

  常考的題目。

  從定義上來說:

  重載:是指允許存在多個同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。

  重寫:是指子類重新定義父類虛函數(shù)的方法。

  從實現(xiàn)原理上來說:

  重載:編譯器根據(jù)函數(shù)不同的參數(shù)表,對同名函數(shù)的名稱做修飾,然后這些同名函數(shù)就成了不同的函數(shù)(至少對于編譯器來說是這樣的)。如,有兩個同名函數(shù):function func(p:integer):integer;和function func(p:string):integer;。那么編譯器做過修飾后的函數(shù)名稱可能是這樣的:int_func、str_func。對于這兩個函數(shù)的調(diào)用,在編譯器間就已經(jīng)確定了,是靜態(tài)的。也就是說,它們的地址在編譯期就綁定了(早綁定),因此,重載和多態(tài)無關(guān)!

  重寫:和多態(tài)真正相關(guān)。當子類重新定義了父類的虛函數(shù)后,父類指針根據(jù)賦給它的不同的子類指針,動態(tài)的調(diào)用屬于子類的該函數(shù),這樣的函數(shù)調(diào)用在編譯期間是無法確定的(調(diào)用的子類的虛函數(shù)的地址無法給出)。因此,這樣的函數(shù)地址是在運行期綁定的(晚綁定)。

  4. 多態(tài)的作用?

  主要是兩個:

  1. 隱藏實現(xiàn)細節(jié),使得代碼能夠模塊化;擴展代碼模塊,實現(xiàn)代碼重用;

  2. 接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的正確調(diào)用。

  5. Ado與Ado.net的相同與不同?

  除了“能夠讓應(yīng)用程序處理存儲于DBMS 中的數(shù)據(jù)“這一基本相似點外,兩者沒有太多共同之處。但是Ado使用OLE DB 接口并基于微軟的COM 技術(shù),而ADO.NET 擁有自己的ADO.NET 接口并且基于微軟的.NET 體系架構(gòu)。眾所周知.NET 體系不同于COM 體系,ADO.NET 接口也就完全不同于ADO和OLE DB 接口,這也就是說ADO.NET 和ADO是兩種數(shù)據(jù)訪問方式。ADO.net 提供對XML 的支持。

  6. New delete 與mallocfree 的聯(lián)系與區(qū)別?

  答案:都是在堆(heap)上進行動態(tài)的內(nèi)存操作。用malloc函數(shù)需要指定內(nèi)存分配的字節(jié)數(shù)并且不能初始化對象,new 會自動調(diào)用對象的構(gòu)造函數(shù)。delete 會調(diào)用對象的destructor,而free 不會調(diào)用對象的destructor.

  (可以看看:顯式調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù))

  7. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

  答案:i 為30。(注意直接展開就是了) 5 * 5 + 5

  8. 有哪幾種情況只能用intializationlist 而不能用assignment?

  答案:當類中含有const、reference 成員變量;基類的構(gòu)造函數(shù)都需要初始化表。

  9. C++是不是類型安全的?

  答案:不是。兩個不同類型的指針之間可以強制轉(zhuǎn)換(用reinterpret cast)。C#是類型安全的。

  10. main 函數(shù)執(zhí)行以前,還會執(zhí)行什么代碼?

  答案:全局對象的構(gòu)造函數(shù)會在main 函數(shù)之前執(zhí)行,為malloc分配必要的資源,等等。

  11. 描述內(nèi)存分配方式以及它們的區(qū)別?

  1) 從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量,static 變量。

  2) 在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集。

  3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc 或new 申請任意多少的內(nèi)存,程序員自己負責在何時用free 或delete 釋放內(nèi)存。動態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問題也最多。

  4) 代碼區(qū)。

3158142