1.c與c++的區別?
c是面向過程,c++物件導向,c是c++的乙個子集,c++還有繼承多型分裝等特性
2.c++11的新特性?c++14?c++17
c++11:auto關鍵字,nullptr,for新用法( for(auto a: b) ), 智慧型指標,匿名函式(lambda)等
c++14:auto關鍵字擴充套件,泛型lambda
c++17:
3.指標和引用的區別?
1.指標是乙個儲存記憶體位址的變數,指向乙個記憶體單元;引用是變數的別名
2.用const指標,沒有const引用
3.指標可以為空,引用必須初始化,不能為null
4.有多級指標,但沒有多級引用
5.指標初始化後可以指向其他儲存單元,引用初始化後不能改變
4.static和const區別?
const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間
5.const和define的區別?
1.define在預處理階段展開,const是在編譯執行階段使用
2.define沒有型別檢查,const在編譯器有執行檢查
3.define沒有分配記憶體,const會分配儲存空間
4.const可以節省空間,const常量在程式執行中只有乙份拷貝(靜態區), 而define有若干個拷貝
5.編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。
6.巨集定義只做替換,程式執行時不分配記憶體
6.define和typedef的區別?
1.typedef常用於定義乙個識別符號及關鍵字的別名,不實際分配記憶體空間;define為巨集定義語句,在預處理過程中完成,缺少型別檢測
2.typdef和define不同,不僅僅是單純的型別替換
例如
#define int int*
typedef int* pint;
int a, b; //a是int*型別,b是int
pint c, d; //c和d都是int*
7.struct和class的區別?
1.兩者都可以用成員函式,變數,以及可繼承
2.struct預設許可權為public, class為private
3.struct預設繼承方式為public,class為private
8.c++中的過載,覆蓋,隱藏的區別?
1.過載:同一作用域內,函式名相同,但是引數的型別與順序是不同的函式組為過載函式(不考慮返回值型別)
2.覆蓋(重寫):派生類中存在重新定義的函式。函式名,引數列表與返回值都和基類一致。基類的函式必須要有virtual修飾
3.隱藏:派生類存在和基類函式名相同的函式,基類可以不是virtual函式,引數列表和返回值也可以不同。
9.c++多型的實現,虛函式原理
多型: 指當不同的物件收到相同的訊息時,產生不同的動作
1.編譯時多型(靜態繫結):函式過載,運算子過載
2.執行時多型(動態繫結):虛函式
虛函式:
1.虛函式是通過一張虛函式表實現的(編譯器處理虛函式的方法:為每個類物件新增乙個隱藏成員,隱藏成員中儲存了乙個指向函式位址陣列的指標,稱為虛表指標,這種陣列成為虛函式表)
2.虛函式表中主要存放勒種虛函式的位址,用於解決繼承,重寫的問題
3.繼承的時候,若派生類重寫了虛函式,則原先指向基類虛函式位址的指標將指向派生類虛函式的位址
11.c++如何實現乙個介面
抽象類,使用純虛函式
12.c++虛繼承的作用
用於解決多重繼承的問題:
不同物件繼承的同一基類會在子類中存在的多份拷貝,浪費儲存空間,並且造成二義性
底層的實現:虛繼承的時候,子類都會有乙個虛基類的指標和虛基類表,所以基類只存在乙份拷貝,避免了二義性
13.c++虛析構函式,虛建構函式
1.虛建構函式:c++不能設定虛建構函式,
delphi可以設定虛建構函式。
14.c++中的建構函式
1.預設建構函式
2.一般建構函式
3.拷貝建構函式
4.轉換建構函式
15.四種型別轉換的區別
static_cast:
dynamic_cast:
const_cast:
reinpreter_cast:
16.淺拷貝和深拷貝
類中預設的複製建構函式進行的是淺拷貝。
1.淺拷貝只是對指標的拷貝,拷貝後指向同一記憶體空間;深拷貝不只是對指標拷貝,還對內容進行的拷貝,指向不同的位址
2.淺拷貝容易造成記憶體洩漏(析構的時候析構了兩次)
17.share_ptr, weak_ptr, auto_ptr以及unique_ptr
18.c++的記憶體模型
1.堆區(動態區):用於存放new分配的變數
2.棧區:用於存放區域性變數
3.靜態儲存區:用於儲存全域性變數和靜態變數
4.常量儲存區:儲存常量,字串常量等
5.**區:儲存**
關於自由儲存區網上意見不同,有的認為可以等價於堆區
5.自由儲存區:存放malloc分配的變數
19.c++的記憶體對齊
20.new/delete和malloc/free的區別
1.malloc/free是庫函式, new/delete是操作符
2.malloc/free只是單純的申請空間,new/delete還會呼叫建構函式和析構函式
3.malloc不丟擲異常,new會丟擲異常
21.new operator, operator new, placement new的區別
22.stl中vector的實現
23.stl中unordered_map和map的區別
1.unordered_map底層為hashtable, map底層為紅黑樹
2.unordered_map是無序的
24.stl中set和map的區別
1.兩者的底層都是紅黑樹
2.set的節點是乙個元素,map的節點是一對元素(key和value)
3.元素都會被自動排序
4.都不允許鍵值重複
5.set不能改變值,因為key=value;map可以通過key改變value
25.stl紅黑樹的實現
1.紅黑樹是乙個二叉搜尋樹
2.滿足4條規則(a.節點不是紅色就是黑色b.根節點為黑色c.如果節點為紅色,子節點必須為黑色d.任意節點到null的黑色節點數相同)
3.通過旋轉維持紅黑樹的結構
26.stl hashtable實現
27.stl常見容器的區別,用途
vector:
list:
deque:
28.如何實現乙個不可繼承的類
28.實現乙個string類
c 面試面試題 持續更新中。。。
1 下面輸出什麼?public class a public class b a class program 解答 首先4.0 是編譯不過,缺少隱式轉換,這種操作本來就是錯誤的 執行時5.0丟擲異常,無法將a轉換成b 1.0 print a 2.0 print b,3.0 print b 2 將乙個...
C 面試題整理 持續更新
1.自己實現memcpy void mymemcopy void dest,const void src,size t count 2.兩個有序鍊錶合成乙個有序鍊錶 遞迴演算法 nodeptr merge lists nodeptr one head,nodeptr two head else re...
TCP IP面試題(持續更新)
no.1 tcp ip基礎 這些知識點都可以參考 no.2 常見面試題 tcp與udp的區別 tcp協議是有連線的,有連線的意思是開始傳輸實際資料之前tcp的客戶端和伺服器端必須通過三次握手建立連線,會話結束之後通過四次揮手結束連線。而udp是無連線的 tcp協議保證資料按序傳送,按序到達,提供超時...