中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      C和C++經(jīng)典筆試題附答案解析

      時間:2024-09-14 08:24:49 文圣 筆試題目 我要投稿
      • 相關(guān)推薦

      C和C++經(jīng)典筆試題附答案解析

        在現(xiàn)實的學(xué)習(xí)、工作中,我們都可能會接觸到試題,借助試題可以檢測考試者對某方面知識或技能的掌握程度。大家知道什么樣的試題才是好試題嗎?以下是小編整理的C和C++經(jīng)典筆試題附答案解析,希望能夠幫助到大家。

      C和C++經(jīng)典筆試題附答案解析

        C和C++筆試題

        1、C和C++的區(qū)別

        1)C是面向過程的語言,是一個結(jié)構(gòu)化的語言,考慮如何通過一個過程對輸入進行處理得到輸出;C++是面向?qū)ο蟮恼Z言,主要特征是“封裝、繼承和多態(tài)”。封裝隱藏了實現(xiàn)細節(jié),使得代碼模塊化;派生類可以繼承父類的數(shù)據(jù)和方法,擴展了已經(jīng)存在的模塊,實現(xiàn)了代碼重用;多態(tài)則是“一個接口,多種實現(xiàn)”,通過派生類重寫父類的虛函數(shù),實現(xiàn)了接口的重用。

        2)C和C++動態(tài)管理內(nèi)存的方法不一樣,C是使用malloc/free,而C++除此之外還有new/關(guān)鍵字。

        3)C++支持函數(shù)重載,C不支持函數(shù)重載

        4)C++中有引用,C中不存在引用的概念

        2、C++中指針和引用的區(qū)別

        1)指針是一個新的變量,存儲了另一個變量的地址,我們可以通過訪問這個地址來修改另一個變量;

        引用只是一個別名,還是變量本身,對引用的任何操作就是對變量本身進行操作,以達到修改變量的目的

        2)引用只有一級,而指針可以有多級

        3)指針傳參的時候,還是值傳遞,指針本身的值不可以修改,需要通過解引用才能對指向的對象進行操作

        引用傳參的時候,傳進來的就是變量本身,因此變量可以被修改

        3、結(jié)構(gòu)體struct和共同體union(聯(lián)合)的區(qū)別

        結(jié)構(gòu)體:將不同類型的數(shù)據(jù)組合成一個整體,是自定義類型

        共同體:不同類型的幾個變量共同占用一段內(nèi)存

        1)結(jié)構(gòu)體中的每個成員都有自己獨立的地址,它們是同時存在的;

        共同體中的所有成員占用同一段內(nèi)存,它們不能同時存在;

        2)sizeof(struct)是內(nèi)存對齊后所有成員長度的總和,sizeof(union)是內(nèi)存對齊后最長數(shù)據(jù)成員的長度、

        結(jié)構(gòu)體為什么要內(nèi)存對齊呢?

        4、#define和const的區(qū)別

        1)#define定義的常量沒有類型,所給出的是一個立即數(shù);const定義的常量有類型名字,存放在靜態(tài)區(qū)域

        2)處理階段不同,#define定義的宏變量在預(yù)處理時進行替換,可能有多個拷貝,const所定義的變量在編譯時確定其值,只有一個拷貝。

        3)#define定義的常量是不可以用指針去指向,const定義的常量可以用指針去指向該常量的地址

        4)#define可以定義簡單的函數(shù),const不可以定義函數(shù)

        5、重載overload,覆蓋override,重寫overwrite,這三者之間的區(qū)別

        1)overload,將語義相近的幾個函數(shù)用同一個名字表示,但是參數(shù)和返回值不同,這就是函數(shù)重載

        特征:相同范圍(同一個類中)、函數(shù)名字相同、參數(shù)不同、virtual關(guān)鍵字可有可無

        2)override,派生類覆蓋基類的虛函數(shù),實現(xiàn)接口的重用

        特征:不同范圍(基類和派生類)、函數(shù)名字相同、參數(shù)相同、基類中必須有virtual關(guān)鍵字(必須是虛函數(shù))

        3)overwrite,派生類屏蔽了其同名的基類函數(shù)

        特征:不同范圍(基類和派生類)、函數(shù)名字相同、參數(shù)不同或者參數(shù)相同且無virtual關(guān)鍵字

        6、new、、malloc、free之間的關(guān)系

        new/,malloc/free都是動態(tài)分配內(nèi)存的方式

        1)malloc對開辟的空間大小嚴格指定,而new只需要對象名

        2)new為對象分配空間時,調(diào)用對象的構(gòu)造函數(shù),調(diào)用對象的析構(gòu)函數(shù)

        既然有了malloc/free,C++中為什么還需要new/呢?

        因為malloc/free是庫函數(shù)而不是運算符,不能把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的功能強加于malloc/free

        7、和[]的區(qū)別

        只會調(diào)用一次析構(gòu)函數(shù),而[]會調(diào)用每個成員的析構(gòu)函數(shù)

        用new分配的內(nèi)存用釋放,用new[]分配的內(nèi)存用[]釋放

        8、STL庫用過嗎?常見的STL容器有哪些?算法用過幾個?

        STL包括兩部分內(nèi)容:容器和算法

        容器即存放數(shù)據(jù)的地方,比如array, vector,分為兩類,序列式容器和關(guān)聯(lián)式容器

        序列式容器,其中的元素不一定有序,但是都可以被排序,比如vector,list,queue,stack,heap, priority-queue, slist

        關(guān)聯(lián)式容器,內(nèi)部結(jié)構(gòu)是一個平衡二叉樹,每個元素都有一個鍵值和一個實值,比如map, set, hashtable, hash_set

        算法有排序,復(fù)制等,以及各個容器特定的算法

        迭代器是STL的精髓,迭代器提供了一種方法,使得它能夠按照順序訪問某個容器所含的各個元素,但無需暴露該容器的內(nèi)部結(jié)構(gòu),它將容器和算法分開,讓二者獨立設(shè)計。

        9、const知道嗎?解釋一下其作用

        const修飾類的成員變量,表示常量不可能被修改

        const修飾類的成員函數(shù),表示該函數(shù)不會修改類中的數(shù)據(jù)成員,不會調(diào)用其他非const的成員函數(shù)

        10、虛函數(shù)是怎么實現(xiàn)的

        每一個含有虛函數(shù)的類都至少有有一個與之對應(yīng)的虛函數(shù)表,其中存放著該類所有虛函數(shù)對應(yīng)的函數(shù)指針(地址),

        類的示例對象不包含虛函數(shù)表,只有虛指針;

        派生類會生成一個兼容基類的虛函數(shù)表。

        11、堆和棧的區(qū)別

        1)棧 stack 存放函數(shù)的參數(shù)值、局部變量,由編譯器自動分配釋放

        堆heap,是由new分配的內(nèi)存塊,由應(yīng)用程序控制,需要程序員手動利用釋放,如果沒有,程序結(jié)束后,操作系統(tǒng)自動回收

        2)因為堆的分配需要使用頻繁的new/,造成內(nèi)存空間的不連續(xù),會有大量的碎片

        3)堆的生長空間向上,地址越大,棧的生長空間向下,地址越小

        12、關(guān)鍵字static的作用

        1)函數(shù)體內(nèi): static 修飾的局部變量作用范圍為該函數(shù)體,不同于auto變量,其內(nèi)存只被分配一次,因此其值在下次調(diào)用的時候維持了上次的值

        2)模塊內(nèi):static修飾全局變量或全局函數(shù),可以被模塊內(nèi)的所有函數(shù)訪問,但是不能被模塊外的其他函數(shù)訪問,使用范圍限制在聲明它的模塊內(nèi)

        3)類中:修飾成員變量,表示該變量屬于整個類所有,對類的所有對象只有一份拷貝

        4)類中:修飾成員函數(shù),表示該函數(shù)屬于整個類所有,不接受this指針,只能訪問類中的static成員變量

        注意和const的區(qū)別!const強調(diào)值不能被修改,而static強調(diào)唯一的拷貝,對所有類的對象

        13、STL中map和set的原理(關(guān)聯(lián)式容器)

        map和set的底層實現(xiàn)主要通過紅黑樹來實現(xiàn)

        紅黑樹是一種特殊的二叉查找樹

        1)每個節(jié)點或者是黑色,或者是紅色

        2)根節(jié)點是黑色

        3) 每個葉子節(jié)點(NIL)是黑色。 [注意:這里葉子節(jié)點,是指為空(NIL或NULL)的葉子節(jié)點!]

        4)如果一個節(jié)點是紅色的,則它的子節(jié)點必須是黑色的

        5)從一個節(jié)點到該節(jié)點的子孫節(jié)點的所有路徑上包含相同數(shù)目的黑節(jié)點。

        14、#include#include "file.h" 的區(qū)別  前者是從標準庫路徑尋找  后者是從當前工作路徑

        15、什么是內(nèi)存泄漏?面對內(nèi)存泄漏和指針越界,你有哪些方法?

        動態(tài)分配內(nèi)存所開辟的空間,在使用完畢后未手動釋放,導(dǎo)致一直占據(jù)該內(nèi)存,即為內(nèi)存泄漏。

        方法:malloc/free要配套,對指針賦值的時候應(yīng)該注意被賦值的指針是否需要釋放;使用的時候記得指針的長度,防止越界

        16、定義和聲明的區(qū)別

        聲明是告訴編譯器變量的類型和名字,不會為變量分配空間

        定義需要分配空間,同一個變量可以被聲明多次,但是只能被定義一次

        17、C++文件編譯與執(zhí)行的四個階段

        1)預(yù)處理:根據(jù)文件中的預(yù)處理指令來修改源文件的內(nèi)容

        2)編譯:編譯成匯編代碼

        3)匯編:把匯編代碼翻譯成目標機器指令

        4)鏈接:鏈接目標代碼生成可執(zhí)行程序

        18、STL中的vector的實現(xiàn),是怎么擴容的?

        vector使用的注意點及其原因,頻繁對vector調(diào)用push_back()對性能的影響和原因。vector就是一個動態(tài)增長的數(shù)組,里面有一個指針指向一片連續(xù)的空間,當空間裝不下的時候,會申請一片更大的空間,將原來的數(shù)據(jù)拷貝過去,并釋放原來的舊空間。當刪除的時候空間并不會被釋放,只是清空了里面的數(shù)據(jù)。對比array是靜態(tài)空間一旦配置了就不能改變大小。

        vector的動態(tài)增加大小的時候,并不是在原有的空間上持續(xù)新的空間(無法保證原空間的后面還有可供配置的空間),而是以原大小的兩倍另外配置一塊較大的空間,然后將原內(nèi)容拷貝過來,并釋放原空間。在VS下是1.5倍擴容,在GCC下是2倍擴容。

        在原來空間不夠存儲新值時,每次調(diào)用push_back方法都會重新分配新的空間以滿足新數(shù)據(jù)的添加操作。如果在程序中頻繁進行這種操作,還是比較消耗性能的。

        19、STL中unordered_map和map的區(qū)別

        map是STL中的一個關(guān)聯(lián)容器,提供鍵值對的數(shù)據(jù)管理。底層通過紅黑樹來實現(xiàn),實際上是二叉排序樹和非嚴格意義上的二叉平衡樹。所以在map內(nèi)部所有的數(shù)據(jù)都是有序的,且map的查詢、插入、刪除操作的時間復(fù)雜度都是O(logN)。

        unordered_map和map類似,都是存儲key-value對,可以通過key快速索引到value,不同的是unordered_map不會根據(jù)key進行排序。unordered_map底層是一個防冗余的哈希表,存儲時根據(jù)key的hash值判斷元素是否相同,即unoredered_map內(nèi)部是無序的。

        20、C++的內(nèi)存管理

        在C++中,內(nèi)存被分成五個區(qū):棧、堆、自由存儲區(qū)、靜態(tài)存儲區(qū)、常量區(qū)

        棧:存放函數(shù)的參數(shù)和局部變量,編譯器自動分配和釋放

        堆:new關(guān)鍵字動態(tài)分配的內(nèi)存,由程序員手動進行釋放,否則程序結(jié)束后,由操作系統(tǒng)自動進行回收

        自由存儲區(qū):由malloc分配的內(nèi)存,和堆十分相似,由對應(yīng)的free進行釋放

        全局/靜態(tài)存儲區(qū):存放全局變量和靜態(tài)變量

        常量區(qū):存放常量,不允許被修改

        21、 構(gòu)造函數(shù)為什么一般不定義為虛函數(shù)?而析構(gòu)函數(shù)一般寫成虛函數(shù)的原因 ?

        (1)構(gòu)造函數(shù)不能聲明為虛函數(shù)

        1)因為創(chuàng)建一個對象時需要確定對象的類型,而虛函數(shù)是在運行時確定其類型的。而在構(gòu)造一個對象時,由于對象還未創(chuàng)建成功,編譯器無法知道對象的實際類型,是類本身還是類的派生類等等

        2)虛函數(shù)的調(diào)用需要虛函數(shù)表指針,而該指針存放在對象的內(nèi)存空間中;若構(gòu)造函數(shù)聲明為虛函數(shù),那么由于對象還未創(chuàng)建,還沒有內(nèi)存空間,更沒有虛函數(shù)表地址用來調(diào)用虛函數(shù)即構(gòu)造函數(shù)了

        (2)析構(gòu)函數(shù)最好聲明為虛函數(shù)

        首先析構(gòu)函數(shù)可以為虛函數(shù),當析構(gòu)一個指向派生類的基類指針時,最好將基類的析構(gòu)函數(shù)聲明為虛函數(shù),否則可以存在內(nèi)存泄露的問題。

        如果析構(gòu)函數(shù)不被聲明成虛函數(shù),則編譯器實施靜態(tài)綁定,在刪除指向派生類的基類指針時,只會調(diào)用基類的析構(gòu)函數(shù)而不調(diào)用派生類析構(gòu)函數(shù),這樣就會造成派生類對象析構(gòu)不完全。

        22、靜態(tài)綁定和動態(tài)綁定的介紹

        靜態(tài)綁定和動態(tài)綁定是C++多態(tài)性的一種特性

        1)對象的靜態(tài)類型和動態(tài)類型

        靜態(tài)類型:對象在聲明時采用的類型,在編譯時確定

        動態(tài)類型:當前對象所指的類型,在運行期決定,對象的動態(tài)類型可變,靜態(tài)類型無法更改

        2)靜態(tài)綁定和動態(tài)綁定

        靜態(tài)綁定:綁定的是對象的靜態(tài)類型,函數(shù)依賴于對象的靜態(tài)類型,在編譯期確定

        動態(tài)綁定:綁定的是對象的動態(tài)類型,函數(shù)依賴于對象的動態(tài)類型,在運行期確定

        只有虛函數(shù)才使用的是動態(tài)綁定,其他的全部是靜態(tài)綁定

        23、 引用是否能實現(xiàn)動態(tài)綁定,為什么引用可以實現(xiàn)

        可以。因為引用(或指針)既可以指向基類對象也可以指向派生類對象,這一事實是動態(tài)綁定的關(guān)鍵。用引用(或指針)調(diào)用的虛函數(shù)在運行時確定,被調(diào)用的函數(shù)是引用(或指針)所指的對象的實際類型所定義的。

        24、深拷貝和淺拷貝的區(qū)別

        深拷貝和淺拷貝可以簡單的理解為:如果一個類擁有資源,當這個類的對象發(fā)生復(fù)制過程的時候,如果資源重新分配了就是深拷貝;反之沒有重新分配資源,就是淺拷貝。

      【C和C++經(jīng)典筆試題附答案解析】相關(guān)文章:

      普天C++筆試題及答案03-27

      精選C++面試題及答案05-23

      華為C/C++筆試題答案10-16

      C/C++程序員必備資料 常見筆面試題深入解析12-12

      華為C/C++筆經(jīng)10-11

      C++筆試題03-25

      2016年c++經(jīng)典面試題及答案03-19

      部分c/c++筆試題10-26

      群碩筆試題Java和C++、C#11-21

      主站蜘蛛池模板: 午夜亚洲国产精品福利| 国产一区二区三区草莓av| 欧美人与动牲交片免费播放| 亚洲啪啪AⅤ一区二区三区| 天全县| 欧洲国产成人精品91铁牛tv| 偷拍熟女亚洲另类| 最新国产精品精品视频| 色琪琪一区二区三区亚洲区| 中日韩欧美高清在线播放| 一区二区三区在线高清视频 | 精精国产xxx在线视频app| av中文字幕在线资源网| 中文字幕熟女一区二区三区| 亚洲青青草视频在线播放| 免费人人av看| 佛教| 江陵县| 武威市| 都安| 国产三级国产精品三级在专区 | 人妻中文字幕av有码在线| 亚洲午夜亚洲精品国产成人| 日韩无码尤物视频| 农村国产毛片一区二区三区女| 上杭县| 佳木斯市| 卢龙县| 第九色区Aⅴ天堂| 国产一区二区内射最近人| 国产chinese在线视频| 一区二区三区蜜桃在线视频| 国产人妖一区二区在线| 日本理伦一区二区三区| 日韩精品一二区在线视频| 成人国产在线观看高清不卡| 偷拍亚洲一区二区三区| 91网红福利精品区一区二| 亚洲中文字幕无线乱码va| 久草精品手机视频在线观看 | 成人影院免费观看在线播放视频|