1. 程式人生 > >《C++primer(第五版)》學習之路-第十八章:用於大型程式的工具

《C++primer(第五版)》學習之路-第十八章:用於大型程式的工具

宣告:版權所有,轉載請標明出處,請勿用於商業用途。聯絡信箱:libi[email protected]

18.1 異常處理

1.異常處理機制允許程式中獨立開發的部分能夠在執行時就出現的問題進行通訊並做出相應的處理。異常使得我們能夠將問題的檢測與解決過程分離開來。程式的一部分負責檢測問題的出現,然後解決該問題的任務傳遞給程式的另一部分。檢測環節無需知道問題處理模板的所有細節,反之亦然。

2.一個異常如果沒有被捕獲,則它終止當前的程式。

3.除了一些極細小的差別外,要求異常的型別和catch的型別時精確匹配的:

⑴允許從非常量向常量的型別轉換,也就是說,一條非常量物件的throw語句可以匹配一個接受常量引用的catch語句。

⑵允許從派生類向基類的型別轉換

⑶陣列被轉換成指向陣列(元素)型別的指標,函式被轉換成指向該函式型別的指標。

4.要想處理建構函式初始值丟擲的異常,我們必須將建構函式寫成函式try語句塊的形式。函式try語句塊使得一組catch語句技能處理建構函式體,也能處理建構函式的初始化過程。

關鍵字try出現在表示建構函式初始值列表的冒號以及表示建構函式體的花括號之前。與這個try關聯的catch既能處理建構函式體丟擲的異常,也能處理成員初始化列表丟擲的異常。

在初始化建構函式的引數時也可能發生異常,這樣的異常不屬於函式try語句塊的一部分。函式try語句塊只能處理建構函式開始執行後發生的異常。和其他函式呼叫一樣,如果在引數初始化的過程中發生了異常,則該異常屬於呼叫表示式的一部分,並將在呼叫者所在的上下文中處理。

5.我們通過提供noexcept說明指出某個函式不會丟擲異常。其形式是關鍵字noexcept緊跟在函式的引數列表後面,用以標識該函式不會丟擲異常。

18.2 名稱空間

1.全域性作用域中定義的名字也就是定義在全域性名稱空間中,全域性名稱空間以隱式的方式宣告,並且在所有程式中都存在,全域性作用域中定義的名字被隱式地新增到全域性名稱空間中。

作用域運算子同樣可以用於全域性作用域的成員,因為全域性作用域是隱式的,所以它並沒有名字。

::member_name表示全域性名稱空間中的一個成員。

2.未命名的名稱空間是指關鍵字namespace後緊跟著花括號括起來的一系列宣告語句。未命名的名稱空間中定義的變數擁有靜態生命週期:它們在第一次使用前建立,並且直到程式結束才銷燬。

18.3 多重繼承與虛繼承

1.多重繼承是指從多個直接基類中產生派生類的能力。多重繼承的派生類繼承了所有父類的屬性。

2.虛繼承的目的是令某個類做出宣告,承諾願意共享它的基類。其中,共享的基類子物件成為虛基類。在這種機制下,不論虛基類在繼承體系中出現了多少次,在派生類中都只包含唯一一個共享虛基類子物件。

3.虛基類總是先於非虛基類構造,與它們在繼承體系中的次序和位置無關。

相關推薦

no