複試 程式語言篇

2021-09-19 12:52:44 字數 2981 閱讀 9154

01 c++的特點

c++是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計(泛型程式設計),還可以進行以繼承和多型為特點的物件導向的程式設計(物件導向程式設計)。

常用於系統開發,引擎開發等應用領域,是最受廣大程式設計師受用的最強大程式語言之一,支援類、封裝、繼承、多型等特性。

拓展:面對物件程式設計:物件導向是一種對現實世界理解和抽象的方法、思想,通過將需求要素轉化為物件進行問題處理的一種思想。

泛型程式設計:泛型程式設計是一種程式設計風格,其演算法以盡可能抽象的方式編寫,而不依賴於執行這些演算法的資料形式。

類:類定義了事物的屬性和它可以做到的(它的行為)。乙個類的方法和屬性被稱為「成員」。乙個類所包含的方法和資料描述一組物件的共同屬性和行為。類是在物件之上的抽象,物件則是類的具體化,是類的例項。

封裝性:封裝使資料和加工該資料的方法(函式)封裝為乙個整體,把物件的設計者和物件的使用者分開,使用者不必知曉行為實現的細節,可以增加安全性。

繼承性:繼承性是子類共享父類之間資料和方法的機制。乙個類直接繼承其它類的全部描述,同時可修改和擴充。可以增強**的復用性。

多型性:物件根據所接收的訊息而做出動作。同一訊息為不同的物件接受時可產生完全不同的行動,這種現象稱為多型性。使具有不同內部結構的物件共享相同的外部介面。可以增加擴充套件性。

02 c的異常處理機制

在c語言中,傳統的錯誤處理方式有如下幾種:

1.直接終止程式(自殺)

例如:

int main()
當用gcc編譯完後,執行,會列印「浮點數例外」,然後程式結束。

這種情況是不允許的,無條件終止程式的庫無法運用到不能當機的程式裡。

2.返回乙個錯誤的值,附加錯誤碼

這種錯誤處理方式也很常見,比如我們用c語言開啟乙個檔案失敗時:

#include#includeint main()

return 0;

}

這種情況,比較常用,但是有時不合適,例如返回錯誤碼是int,每個呼叫都要檢查錯誤值,極不方便,也容易讓程式規模加倍。

3.返回乙個合法的值,讓程式處於某種非法的狀態

這種例子,最常見的就是 atoi 函式,例如:

#include#includeint main()
雖然b為0,但是有乙個全域性變數表示了這個0屬於非法值,不是由字串0轉過來的。

這種情況,很容易誤導呼叫者,萬一呼叫者沒有去檢查全域性變數errno或者通過其他方式檢查錯誤,那是乙個災難,而且這種方式在併發的情況下不能很好工作。

4.呼叫乙個預先準備好在出現"錯誤"的情況下使用的函式

這種異常處理情況比較少見

#include#includevoid dealerror()

typedef void(*fun)();

int div(int a,int b,fun callback)

return a/b;}

int main()

通過暴力的方式解決

暴力的方式有兩種,abort()函式和常見exit()函式.例如依然處理除0問題,**可以這樣寫:

#include#includeint div(int a,int b)

return a/b;}

int main()

使用goto語句

雖然,goto語句十分強大,但違背了程式的順序執行,打亂的程式的執行流,盲目的使用goto語句可能會出現意想不到的錯誤,因此,並不推薦使用goto語句.

#include#includeint main()

printf("a/b = %d\n",a/b);

return 0;

error:

printf("除數不能為0,程式異常退出!\n");

exit(-1);

}

03 異常的丟擲與捕獲

在c++中,異常的丟擲和處理主要使用了以下三個關鍵字:try、 throw 、 catch.

當我們在程式中想丟擲乙個異常時,可以這樣:

#include#includeusing namespace std;

int div(int left,int right)

return left/right;

}

當我們想使用這個函式時,需要在函式外部進行異常的捕獲:

int main()catch(exception & e)catch(型別名 [形參名])catch(型別名 [形參名])catch(...)
1.異常是通過丟擲物件而引發的,該物件的型別決定了應該啟用哪部分**.

就上述**來說,我們throw了乙個exception物件,因此在捕獲異常時,最終會匹配到catch到exception的**塊.

2.被選中的處理**是呼叫鏈中與該物件型別匹配且離丟擲位置最近的那個.

當try內的**塊出現異常時,系統會根據catch的順序和引數的匹配程度來選擇執行哪個**塊,因此,系統會選擇最靠前且引數越匹配的**塊.

3.丟擲異常後會釋放區域性儲存物件,所以被丟擲的物件也就還給系統了,throw表示式會初始化乙個丟擲特殊的異常物件副本(匿名物件),異常物件由編譯管理,異常物件在傳給對應的catch處理之後撤銷。

也就是說,在上述的除法**中,我們throw出的物件在丟擲異常後會還給作業系統,而throw表示式會自己初始化乙個匿名的物件副本,在傳給catch相應的**塊後被**.

04 記憶體溢位與記憶體洩漏

記憶體溢位 out of memory:是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了乙個integer,但給它存了long才能存下的數,那就是記憶體溢位。

記憶體洩露 memory leak:是指程式在申請記憶體後,無法釋放已申請的記憶體空間,失去了對該段記憶體的控制,因而造成了記憶體的浪費。 一次記憶體洩露危害可以忽略,但記憶體洩露堆積後果很嚴重,無論多少記憶體,遲早會被占光。

複試程式設計訓練七

include include void cechang char str1,char word0 word1 j str1 i j j用來記錄每個單詞的長度 if j max max記錄最大長度 int main 執行結果 include void convert int n 轉換,每個字元之間加...

複試程式設計訓練十

include include void check int p 列印成績 60的 int main 執行結果 include include int prime int m 判斷是否為素數 void godbaha int n int main 執行結果 執行結果 include struct s...

複試篇 Shell學習

1 bash 我們必須通過shell將我們輸入的命令與核心溝通,好讓核心可以控制硬體來正確無誤地工作。變數的設定等 解析出變數 echo home 設定變數 等號兩邊不能有空格 myname kangwenbin echo myname 在原來變數後面新增 path home bin 將普通變數改為...