溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

常用16個(gè)c/c++面試題是什么

發(fā)布時(shí)間:2022-01-06 14:34:13 來(lái)源:億速云 閱讀:100 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“常用16個(gè)c/c++面試題是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“常用16個(gè)c/c++面試題是什么”吧!

1. C中static有什么作用

(1)隱藏。 當(dāng)我們同時(shí)編譯多個(gè)文件時(shí),所有未加static前綴的全局變量和函數(shù)都具有全局可見(jiàn)性,故使用static在不同的文件中定義同名函數(shù)和同名變量,而不必?fù)?dān)心命名沖突。  

(2)static的第二個(gè)作用是保持變量?jī)?nèi)容的持久。存儲(chǔ)在靜態(tài)數(shù)據(jù)區(qū)的變量會(huì)在程序剛開(kāi)始運(yùn)行時(shí)就完成初始化,也是唯一的一次初始化。共有兩種變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū):全局變量和static變量?! ?/p>

(3)static的第三個(gè)作用是默認(rèn)初始化為0.其實(shí)全局變量也具備這一屬性,因?yàn)槿肿兞恳泊鎯?chǔ)在靜態(tài)數(shù)據(jù)區(qū)。在靜態(tài)數(shù)據(jù)區(qū),內(nèi)存中所有的字節(jié)默認(rèn)值都是0×00,某些時(shí)候這一特點(diǎn)可以減少程序員的工作量。

2.C++中const有什么用?

不要一聽(tīng)到const就說(shuō)是常量,這樣給考官一種在和一個(gè)外行交談的感覺(jué)。應(yīng)該說(shuō)const修飾的內(nèi)容不可改變就行了, 定義常量只是一種使用方式而已,還有const數(shù)據(jù)成員,const參數(shù), const返回值, const成員函數(shù)等, 被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。

3. C與C++各自是如何定義常量的?有什么不同?

C中是使用宏#define定義, C++使用更好的const來(lái)定義。區(qū)別: 

1)const是有數(shù)據(jù)類型的常量,而宏常量沒(méi)有,編譯器可以對(duì)前者進(jìn)行靜態(tài)類型安全檢查,對(duì)后者僅是字符替換,沒(méi)有類型安全檢查,而且在字符替換時(shí)可能會(huì)產(chǎn)生意料不到的錯(cuò)誤(邊際效應(yīng))?!?/p>

2)有些編譯器可以對(duì)const常量進(jìn)行調(diào)試, 不能對(duì)宏調(diào)試。

4. 既然C++中有更好的const為什么還要使用宏?

const無(wú)法代替宏作為衛(wèi)哨來(lái)防止文件的重復(fù)包含。

5. C++中引用和指針的區(qū)別?

引用是對(duì)象的別名, 操作引用就是操作這個(gè)對(duì)象, 必須在創(chuàng)建的同時(shí)有效得初始化(引用一個(gè)有效的對(duì)象, 不可為NULL), 初始化完畢就再也不可改變, 引用具有指針的效率, 又具有變量使用的方便性和直觀性, 在語(yǔ)言層面上引用和對(duì)象的用法一樣, 在二進(jìn)制層面上引用一般都是通過(guò)指針來(lái)實(shí)現(xiàn)的, 只是編譯器幫我們完成了轉(zhuǎn)換。 之所以使用引用是為了用適當(dāng)?shù)墓ぞ咦銮∪缙浞值氖拢?體現(xiàn)了最小特權(quán)原則。

6. 說(shuō)一說(shuō)C與C++的內(nèi)存分配方式?

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

2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(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)存的生存期自己決定,使用非常靈活。

7. new/delete 與 malloc()/free() 的區(qū)別?

malloc()free() 是C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),new/delete 是C++的運(yùn)算符, 他們都可以用來(lái)申請(qǐng)和釋放內(nèi)存,malloc()free()不在編譯器控制權(quán)限之內(nèi), 不能把構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加給他們。

8. #include<a.h>和#include"a.h" 有什么區(qū)別?

答:對(duì)于#include ,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索 a.h對(duì)于#include "a.h" ,編譯器從用戶的工作路徑開(kāi)始搜索 a.h

9. 在C++ 程序中調(diào)用被 C編譯器編譯后的函數(shù),為什么要加 extern "C"?

C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)重載。函數(shù)被C++編譯后在庫(kù)中的名字與C語(yǔ)言的不同。假設(shè)某個(gè)函數(shù)的原型為:void foo(int x, int y);該函數(shù)被C編譯器編譯后在庫(kù)中的名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字。C++提供了C連接交換指定符號(hào)extern"C"來(lái)解決名字匹配問(wèn)題。

10. C++中的什么是多態(tài)性?是如何實(shí)現(xiàn)的? 

多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言繼數(shù)據(jù)抽象和繼承之后的第三個(gè)基本特征。它是在運(yùn)行時(shí)出現(xiàn)的多態(tài)性通過(guò)派生類和虛函數(shù)實(shí)現(xiàn)。基類和派生類中使用同樣的函數(shù)名, 完成不同的操作具體實(shí)現(xiàn)相隔離的另一類接口,即把" w h a t"從"h o w"分離開(kāi)來(lái)。多態(tài)性提高了代碼的組織性和可讀性,虛函數(shù)則根據(jù)類型的不同來(lái)進(jìn)行不同的隔離。

11. 什么是動(dòng)態(tài)特性?

在絕大多數(shù)情況下, 程序的功能是在編譯的時(shí)候就確定下來(lái)的, 我們稱之為靜態(tài)特性。 反之, 如果程序的功能是在運(yùn)行時(shí)刻才能確定下來(lái)的, 則稱之為動(dòng)態(tài)特性。C++中, 虛函數(shù),抽象基類, 動(dòng)態(tài)綁定和多態(tài)構(gòu)成了出色的動(dòng)態(tài)特性。

12.什么是封裝?C++中是如何實(shí)現(xiàn)的?

封裝來(lái)源于信息隱藏的設(shè)計(jì)理念, 是通過(guò)特性和行為的組合來(lái)創(chuàng)建新數(shù)據(jù)類型讓接口與具體實(shí)現(xiàn)相隔離。C++中是通過(guò)類來(lái)實(shí)現(xiàn)的, 為了盡量避免某個(gè)模塊的行為干擾同一系統(tǒng)中的其它模塊,應(yīng)該讓模塊僅僅公開(kāi)必須讓外界知道的接口。

13. 什么是RTTI?

RTTI事指運(yùn)行時(shí)類型識(shí)別(Run-time type identification)在只有一個(gè)指向基類的指針或引用時(shí)確定一個(gè)對(duì)象的準(zhǔn)確類型。

14. 什么是拷貝構(gòu)造函數(shù)?

它是單個(gè)參數(shù)的構(gòu)造函數(shù),其參數(shù)是與它同屬一類的對(duì)象的(常)引用;類定義中,如果未提供自己的拷貝構(gòu)造函數(shù),C++提供一個(gè)默認(rèn)拷貝構(gòu)造函數(shù),該默認(rèn)拷貝構(gòu)造函數(shù)完成一個(gè)成員到一個(gè)成員的拷貝

15. 什么是深淺拷貝?

淺拷貝是創(chuàng)建了一個(gè)對(duì)象用一個(gè)現(xiàn)成的對(duì)象初始化它的時(shí)候只是復(fù)制了成員(簡(jiǎn)單賦值)而沒(méi)有拷貝分配給成員的資源(如給其指針變量成員分配了動(dòng)態(tài)內(nèi)存); 深拷貝是當(dāng)一個(gè)對(duì)象創(chuàng)建時(shí),如果分配了資源,就需要定義自己的拷貝構(gòu)造函數(shù),使之不但拷貝成員也拷貝分配給它的資源。

16.面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn)?

開(kāi)發(fā)時(shí)間短, 效率高, 可靠性高。面向?qū)ο缶幊痰木幋a具有高可重用性,可以在應(yīng)用程序中大量采用成熟的類庫(kù)(如STL),從而雖短了開(kāi)發(fā)時(shí)間,軟件易于維護(hù)和升級(jí)。

到此,相信大家對(duì)“常用16個(gè)c/c++面試題是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI