1.oop核心思想:
資料抽象,繼承,動態繫結
2.繼承:
2.1) 繼承子類會繼承父類中除建構函式和析構函式之外的所有成員
如果要繼承建構函式,需要顯示定義
例如
novel::book(std::string book_name):emotionengine(book_name)
建構函式繼承了父類的
2.2)public/private/protect
public 能被類的成員函式和外部訪問
private 只能被本類的成員函式訪問
protected 只能被本類的成員函式和派生類的成員函式訪問
public 繼承: 最常用的,父類的public,子類還為public 父類protected 子類protected
protected 繼承: 繼承來的全為protected,private 繼承來的全為private
2.3) 類在記憶體當中的儲存問題
靜態成員變數,和成員函式都是在類定義的時候都已經分配好記憶體,成員函式在**區,靜態成員變數在靜態區,但是
非靜態的成員函式不能直接由類呼叫,因為包含了this指標引數,因此需要對應的例項
2.4) 派生帶來的相關問題: 虛函式
c++ 中虛函式的實現:
1.每創造乙個帶虛函式的類,就建立乙個vtable,vtabel是對應類的,同乙個類的所有物件共享同一虛函式表,在繼承時,繼承父類的虛函式表,同時加上自己的虛函式,並把覆蓋的替換為自己的
2.虛函式表實際上就是函式指標的陣列,呼叫虛函式時,不是直接呼叫,先根據vptr找到對應的虛函式表,再在虛函式表中找到對應的函式指標,然後呼叫。多重繼承
3.指標的可訪問性問題
指標的可訪問性是由指標的定義決定的,比如說用baseclass定義的指標,可訪問的範圍就是baseclass的記憶體區域
baseclass指標指向派生類的物件,只能訪問派生類從父類繼承的成員,不能把父類位址賦值給派生類的指標,因為派生類訪問範圍更大,會越界
final和override : final用於類,表示該類不可被繼承,用於虛函式,則表示該函式在子類中不能被覆蓋,override用於派生類中,表示該函式是基類的覆蓋
純虛函式:
virtual int fun_a(int number) =0;
在虛函式表中,純虛函式的值就為0,有純虛函式的類不能例項化物件 《C Prime》第2章 閱讀筆記
2018 01 29 20 23 當乙個算術表示式中既有無符號數又有int值時,int值會轉換成為無符號數。相比於int a 3.14 和int a 3.14 當用於內建型別時,如果我們使用列表初始化且初始值存在丟失資訊的風險,則編譯器會報錯。定義在函式體內部的內建型別變數將不被自動初始化。下劃線開...
C Prime13章學習筆記
13.1.1 拷貝建構函式 當乙個建構函式的第乙個引數是自身型別的引用,且任何額外引數都有預設值,則此建構函式為拷貝建構函式 class foo hashptr 在進行拷貝的過程中,有可能指標指向同一記憶體,在呼叫構析函式時,會發現函式已經釋放。13.1.5 使用 default 我們可以通過將拷貝...
C Prime14章學習筆記
過載的運算子是具有特殊名字的函式,它由關鍵字 operator與後面定義的符號組成,過載函式包含返回型別,引數列表以及函式體。過載運算子的引數數量與該運算子的作用的運算物件數量一樣多。如果乙個運算子函式是成員函式,則其第乙個運算物件繫結到this指標上。注意 對於乙個運算子函式來說,它或者是類的成員...