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 將普通變數改為...