C 面試題精簡整理

2021-10-07 01:18:01 字數 2835 閱讀 4909

c++中完全可以刪除 struct 關鍵字,保留 struct 關鍵字是為了相容c。class和struct地唯一區別:class預設域是 private,struct 預設域是 public。現在c++程式設計常使用struct作為乙個組合。例如

struct combination;
new的底層是由malloc實現的。主要區別:(1)malloc是標準函式,new是運算子,new可以呼叫建構函式。

(2)new返回的是指定指標型別,malloc返回的是void*,需要進行強制轉換。

指標繁雜、不利於開發,開發者使用引用代替指標的部分功能。主要區別:(1)引用即是變數的別名,作用相當於常指標,只能指向乙個物件(後面不可更改),而指標可以多次改變指向的物件。(2)指標可以有多級指標。

靜態區存放全域性變數、靜態變數。棧存放區域性變數。堆存放動態記憶體分配。

堆、棧區別:(1)管理方式不同:棧是由編譯器自動申請和釋放空間,堆是需要程式設計師手動申請和釋放;

(2)空間大小不同:棧的空間是有限的,在32位平台下,vc6下預設為1m,堆最大可以到4g;

(3)分配效率不同:棧的效率比堆高很多。

全域性變數、靜態變數、區域性變數區別:

作用域生存週期

全域性變數

全域性程式的整個執行過程

靜態變數

**塊作用域

程式的整個執行過程

區域性變數

**塊作用域

函式呼叫週期

(1)define在預處理階段進行替換,const在編譯時確定其值。

(2)define – 無型別,不進行型別安全檢查,可能會產生意想不到的錯誤;const – 有資料型別,編譯時會進行型別檢查。

程式設計時優先使用const!

封裝:將類的資料、函式封裝在一起,構成乙個定義類

繼承:在一般類基礎上,繼承和派生出特定類,可以擺脫重複分析、重複開發困境。

建構函式:初始化工作

析構函式:清理工作,生存週期結束後自動呼叫

複製建構函式:複製時呼叫,應用場景:(1) b=a;(2)函式 return a; (3) 函式形參傳遞

多型可以分為靜態多型(編譯時的多型,靜態繫結)和動態多型(執行時的多型,動態繫結)

靜態多型:函式過載,運算子過載

//函式過載的例子

int max(int a,intb);

int max(double a,double b);

int max(int a,int b,int c);

int max(int a);

動態多型:動態多型必須借助虛函式,只有通過基類的指標或者引用呼叫虛函式時,才會發生動態繫結。

頻繁呼叫、**簡單的函式,適合定義為inline函式。編譯內聯函式時,直接把內聯函式**插入每乙個呼叫它的地方。

優點:加快函式呼叫速度,加快程式執行。缺點:增加了編譯後的**長度。

虛函式是動態繫結的基礎。如果需要通過基類的指標指向派生類的物件,並且訪問某個與基類同名函式,那麼必須將這個同名函式定義為虛函式。

建構函式不能使用虛函式,析構函式最好使用虛函式(基類的指標指向派生類的物件,通過delete釋放該指標時,需呼叫派生類的析構函式)。

程式在執行過程中動態申請的記憶體空間不再使用後沒有及時釋放,導致那塊記憶體不能被再次使用。

避免方法:及時通過delete、free釋放空間,使用智慧型指標。

基本思想:將指標封裝成類,指標物件生存週期結束時自動呼叫析構函式釋放指標。

大端、小端:

大端模式,是指資料的高位元組儲存在記憶體的低位址。小端模式,是指資料的高位元組儲存在記憶體的高位址中(定義相當繞口,可以不記)。

程式判斷自己計算機是大端還是小端:

int a=1;

char *p=(char *)&a;

if(*p==1) printf("小端\n");

else printf("大端\n");

友元友元函式:定義類外的函式為友元函式可以訪問此類的資料成員。

友元類:宣告a為b的友元類,a中可以直接訪問b類的資料成員。

static全域性變數:

int a;

extern int a;

b.cpp檔案能夠訪問變數a

static int a;

extern int a;

b.cpp檔案不能夠訪問變數a

邊界對齊:

參考:《c++語言程式設計》

nowcoder面經

C 面試題整理

1.c 中類是否支援多繼承?請說明原因。答 不支援,需要用介面來實現多繼承 2.我們都知道乙個類可以有多個建構函式,並且c 會在我們建立類的時候預設的提供乙個無參的建構函式,當我實現了另外乙個有引數的建構函式的時候,我還能呼叫無引數的建構函式嗎?請說明原因。答 不能,因為一旦你實現了乙個建構函式,c...

c 面試題雜項整理

static用法及優點 用法 不能在類宣告中初始化,不能通過建構函式初始化,在定義時初始化 1 static 成員 在類的作用域,避免與其他類成員,全域性變數衝突。阻止乙個類的例項化 純虛函式,建構函式宣告為public 在類內部建物件,不允許在外部建物件main 執行前做了什麼 全域性物件的建構函...

面試題整理 C (二)

1.類,介面的區別 從定義的角度 類描述乙個實體,包括狀態 屬性和動作 介面定義一類動作,沒有實現,也沒有狀態資訊 從程式的角度 介面是函式宣告 類是函式實現 介面可以有屬性,不能有欄位 乙個子類只能繼承乙個父類,但是可以繼承多個介面 2.介面和抽象類的區別 抽象類是一類事物的高度聚合,介面是定義行...