1.繼承:單基繼承
多基繼承:先產生基類成員,在產生派生類成員 基類中含同名成員導致的二義性:處理辦法是採用成員名限定
菱形繼承: 將共同基類宣告為虛基類
2.公有繼承, 私有繼承,保護繼承: 基類私有成員都不能被派生類或派生類物件訪問
public繼承:派生類能訪問基類的public protect,派生類物件只能訪問基類的public -->基類的public private在派生類中保持不變
private繼承:派生類能訪問基類的public和protect成員,派生類物件不能訪問基類任何成員 -->基類的public protected變成派生類的private
protected:派生類能訪問public 和protected,派生類物件不能訪問任何成員 -->基類的public protected在派生類中變為protected
3.類間的轉換:
1.公有繼承方式下,派生類的物件/指標/引用 可以賦值給基類(隱式轉換),因為派生類中包含基類的資訊
2.容許把基類物件指標/引用 強制轉換為派生類物件指標/引用。
3.乙個指向基類的指標可以用來指向該基類共有派生類的任何物件
4.轉換建構函式:可以將建構函式宣告為explicit,來禁止隱式轉換
5.隱式轉換:非c++內建型別a和b,在以下幾種情況下b能隱式轉換為a :
1.b公有繼承自a
2.b中有型別轉換函式class b
3.實現了非explicit的引數為b,class a{ a(const b&) ;
6.靜態聯編和動態聯編:在編譯過程中程序聯編叫靜態聯編,在執行時進行聯編叫動態聯編,
7.虛函式的訪問:1.使用指標指向非虛函式時,編譯器根據指標本身的型別決定呼叫哪個函式
2.使用指標指向虛函式時,編譯器根據指標所指的物件的型別決定呼叫哪個函式
8.動態繫結條件:1.虛函式 2.基類指標或引用進行函式呼叫
9.建構函式和析構函式中的虛函式:如果在建構函式或析構函式中呼叫虛函式,則執行的是為建構函式或析構函式自身型別定義的版本,編譯器會解釋為靜態聯編
虛函式表第乙個虛函式位址 (int*)*(int*)( &b)
第二個 (int*)*(int*)(&b) + 1
呼叫虛函式 typedef void(*pfun)(void)
pfun fun = (pfun)*((int*)*(int*)&b +1)
11.單基繼承時j僅有乙個vptr,多基繼承時有幾個基類就有幾個vptr
12.虛基類表指標,在虛擬繼承的情況下,基類不管在繼承串鏈中被派生多少次,永遠只會存在乙個實體
13.動態執行時型別識別(rtti)和顯式轉換:
typeid 操作符,用於返回指標或者引用所指向物件的實際型別
強制型別轉換:static_cast dynamic_cast const_cast reinterpret_cast
retinterpret_cast 類似於c的強制型別轉換
const_cast 轉換掉表示式的const 性質
static_cast 隱式執行型別轉換
dynamic_cast dynamic_cast(expression) type必須是類的指標,引用或者void*, 涉及運算時型別檢查,而這個資訊在虛函式表中,對沒有虛函式表的類使用dynamic_cast會導致編譯錯誤 -->把基類型別指標或引用轉化為派生類的指標或引用
(檢測當把基類指標(引用)轉化為派生類的指標或引用時檢測當前基類指標是否是指向乙個派生類物件的)
14.
Chapter 9 模板方法模式
模板方法 template method 模式是關於類的行為模式。在乙個抽象類中定義乙個演算法的骨架,其中一些步驟和邏輯已經實現,而將另外一部分步驟和邏輯推遲到子類中去實現。模板方法模式使得子類可以在不改變演算法結果的情況下,重新定義演算法中的某些步驟。模板方法模式讓不同的子類可以用不同的方式實現抽...
chapter9 定義新型別
c 的型別分為 內部型別 自定義型別 c 的一種設計思想 應該讓程式設計師建立跟內部型別一樣易於使用的型別 乙個良好的程式設計習慣 標頭檔案中使用限定名 std 原始檔包含適當的using 類的成員函式 對於類的成員函式,總是有乙個隱含引數,就是正在由我們操作的物件 常量成員函式 示例struct ...
深入理解計算機系統chapter9
從概念上來講 虛擬儲存器被組織為乙個存放在磁碟上的n個連續的位元組大小的單元組成的陣列。磁碟上陣列的內容被快取到主存中 1.讀寫記憶體的安全性 物理記憶體本身是不限制訪問的,任何位址都可以讀寫,而作業系統要求不同的頁面具有不同的訪問許可權,這是利用cpu模式和mmu的記憶體保護機制實現的。例如,te...