日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

最全的C++面试题来啦!(来自各大一线互联网)

發布時間:2023/12/2 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最全的C++面试题来啦!(来自各大一线互联网) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
更多精彩,請點擊上方藍字關注我們!

此面試題全部由成功就業學員提供,來自各大一線互聯網企業,在此謝謝他們的貢獻!

1.new、delete、malloc、free關系

delete會調用對象的析構函數,和new對應free只會釋放內存,new調用構造函數。malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用于申請動態內存和釋放內存。對于非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。

2.delete與?delete?[]區別

delete只會調用一次析構函數,而delete[]會調用每一個成員的析構函數。在More Effective C++中有更為詳細的解釋:“當delete操作符用于數組時,它為每個數組元素調用析構函數,然后調用operator delete來釋放內存。”delete與new配套,delete []與new []配套MemTest?*mTest1=new?MemTest[10];MemTest?*mTest2=new?MemTest;Int?*pInt1=new?int?[10];Int?*pInt2=new?int;delete[]pInt1;?//-1-delete[]pInt2;?//-2-delete[]mTest1;//-3-delete[]mTest2;//-4-在-4-處報錯。這就說明:對于內建簡單數據類型,delete和delete[]功能是相同的。對于自定義的復雜數據類型,delete和delete[]不能互用。delete[]刪除一個數組,delete刪除一個指針。簡單來說,用new分配的內存用delete刪除;用new[]分配的內存用delete[]刪除。delete[]會調用數組元素的析構函數。內部數據類型沒有析構函數,所以問題不大。如果你在用delete時沒用括號,delete就會認為指向的是單個對象,否則,它就會認為指向的是一個數組。

3.C++有哪些性質(面向對象特點)

封裝,繼承和多態。

4.子類析構時要調用父類的析構函數嗎?

析構函數調用的次序是先派生類的析構后基類的析構,也就是說在基類的的析構調用的時候,派生類的信息已經全部銷毀了。定義一個對象時先調用基類的構造函數、然后調用派生類的構造函數;析構的時候恰好相反:先調用派生類的析構函數、然后調用基類的析構函數。

5.多態,虛函數,純虛函數

多態:是對于不同對象接收相同消息時產生不同的動作。C++的多態性具體體現在運行和編譯兩個方面:在程序運行時的多態性通過繼承和虛函數來體現;在程序編譯時多態性體現在函數和運算符的重載上;虛函數:在基類中冠以關鍵字 virtual 的成員函數。?它提供了一種接口界面。允許在派生類中對基類的虛函數重新定義。純虛函數的作用:在基類中為其派生類保留一個函數的名字,以便派生類根據需要對它進行定義。作為接口而存在?純虛函數不具備函數的功能,一般不能直接被調用。從基類繼承來的純虛函數,在派生類中仍是虛函數。如果一個類中至少有一個純虛函數,那么這個類被稱為抽象類(abstract class)。抽象類中不僅包括純虛函數,也可包括虛函數。抽象類必須用作派生其他類的基類,而不能用于直接創建對象實例。但仍可使用指向抽象類的指針支持運行時多態性。

6.求下面函數的返回值(微軟)

int?func(x)?{?int?countx?=?0;?while(x)?{?countx?++;?x?=?x&(x-1);?}?return?countx;?}?假定x = 9999。?答案:8思路:將x轉化為2進制,看含有的1的個數。

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

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

8.將“引用”作為函數參數有哪些特點?

(1)傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調函數中的實參變量或對象的一個別名來使用,所以在被調函數中對形參變量的操作就是對其相應的目標對象(在主調函數中)的操作。(2)使用引用傳遞函數的參數,在內存中并沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所占空間都好。(3)使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重復使用"*指針變量名"的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作為實參。而引用更容易使用,更清晰。

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

如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。常引用聲明方式:const 類型標識符?&引用名=目標變量名;例1int?a?;const?int?&ra=a;ra=1;?//錯誤a=1;?//正確例2string?foo(?);void?bar(string?&?s);那么下面的表達式將是非法的:bar(foo(?));bar("hello?world");原因在于foo(?)和"hello world"串都會產生一個臨時對象,而在C++中,這些臨時對象都是const類型的。因此上面的表達式就是試圖將一個const類型的對象轉換為非const類型,這是非法的。引用型參數應該在能被定義為const的情況下,盡量定義為const 。

10、結構與聯合有何區別?

(1). 結構和聯合都是由多個不同的數據類型成員組成, 但在任何同一時刻, 聯合中只存放了一個被選中的成員(所有成員共用一塊地址空間), 而結構的所有成員都存在(不同成員的存放地址不同)。?(2). 對于聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結構的不同成員賦值是互不影響的。


它,

不僅僅是一個碼

掃碼關注

C++資源免費送

總結

以上是生活随笔為你收集整理的最全的C++面试题来啦!(来自各大一线互联网)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。