記憶體分配有三種方式
1 靜態分配,或者說靜態儲存區域分配。
就是說內存在程式編譯的時候就已經分配好了,這款內存在程式整個執行期間都存在,如全域性變數,static變數。
2 自動分配,或者說是在棧上分配。
比如在執行函式時,函式內區域性變數的儲存單元就是在棧上建立的,函式執行結束時,這些儲存單元自動被釋放。
3 堆上分配,或者說是動態記憶體分配。
那些用malloc和new申請來的記憶體,就是動態的,在堆上分配的。這些堆上分配出來的空間,由申請使用他們的那些人負責釋放。
補充:堆開闢記憶體空間時,是向著記憶體空間增加的方向的。而棧則是向下的,就是向著記憶體位址減少的方向。
過載,覆蓋,隱藏
覆蓋就是派生類函式覆蓋基類的函式。滿足覆蓋的條件:派生類和基類的函式名相同,引數也相同,基類的函式必須有virtual。
隱藏是指派生類的函式遮蔽了與其同名的基類函式。滿足隱藏的條件:派生類和基類的函式名相同,引數不同,不管有無virtual,都算隱藏。或者,派生類和基類函式名相同,引數相同,沒有virtual,也算隱藏(有了virtual算什麼,往上看)
過載就是有幾個函式名相同,但是引數不同的函式。過載發生在相同範圍,一定是同乙個類。
運算子過載virtual關鍵字可有可無 operator不影響優先順序
不是所有的運算子都能被過載,以下運算子就不行:
:: 作用域解析運算子
?: 條件運算子
. 直接成員運算子
.* 接解除類成員指標引用運算子
sizeof
動態繫結 早期繫結
通過靜態解析的基類指標來呼叫函式,都會呼叫基類函式。函式通過指標的靜態,僅取決於指標的型別,而不取決與物件。
對於乙個基類指標或者引用,定義時的型別稱為靜態型別,實際指向物件的型別稱為動態型別。
在任意時候指標pbox都可以指向包含以box為其基類的 派生類的位址,這裡的pbox 宣告為box* 型別。
多型是通過基類指標、基類引用呼叫函式實現多型特性。
我們用virtual關鍵字來避開靜態繫結。
動態繫結的條件,被呼叫函式必須是虛函式,必須通過基指標或者基類引用來呼叫。如果通過this指標間接呼叫虛函式也是動態呼叫。
動態呼叫必須是針對虛函式的呼叫,不能是針對一般成員函式的呼叫,並且就算把成員函式宣告為虛函式,還要用基類指標或者基類引用直接呼叫,或者通過this指標間接呼叫這兩個條件才能實現動態呼叫。
對於一般成員函式(非虛函式)必定是靜態呼叫。
如果基類中把乙個函式定義成虛函式,那麼所有派生類中都有相同的返回值型別,函式簽名,包括const也被認為是虛函式。反之,如果在派生類中,函式的返回值,簽名,只有有乙個和基類不同,在呼叫的時候就不會認為是基類的虛函式,此時執行靜態呼叫。
如果虛函式在基類宣告中帶有預設引數值,那麼在動態呼叫中,總是使用基類宣告中的預設值。
有幾個情況是靜態呼叫函式:
設pbox是基類的指標,rbox是基類引用形參,volume()是虛函式。
使用類名和作用域運算子來強調呼叫指定類的虛函式,如:
pbox->box::volume()
rbox.box::volume()
使用物件名和成員運算子來呼叫虛函式是總是靜態呼叫的
hardcase.volume(); 顯式呼叫運算的hardcase的volume()
另外,用基類指標來呼叫一般成員函式(非虛函式)總是靜態呼叫
基類指標和派生類指標 之間的 轉換
派生類指標可以直接轉化為基類指標:
但是倒過來,基類指標不能隱式地轉換成派生類指標,如果一定要,那麼就是用強制型別轉換,並且這種方式不保證一定成功。
關於派生類和基類直接的轉換**
#includeusingnamespace
std;
class
box};
class carton:public
box};
class cerealpack:public
carton
};int
main()
複習專題 Shell筆記整理
shell是乙個命令列直譯器,接收應用程式 使用者命令,然後呼叫作業系統核心 cat etc shellssh bash 系統變數 home pwd shell user等自定義變數 1 定義變數 變數 值 2 撤銷變數 unset 變數 3 宣告靜態變數 readonly變數,注意 不能unset...
python基礎 複習整理筆記(一)
這是我的第一篇博文,部落格也不知道最終會變成什麼樣,但是我想從這一刻開始,從不完美開始 本文僅作為複習和補充使用,總結歸納多不系統,悉知 歡迎拍磚 交流 指正 一 我的常用工具 1.python直譯器,version 3.6 2.ide pycharm version 2017.2 anaconda...
jQuery學習筆記(五)JQ複習整理
jq層級選擇器 1,find 找到索引的子代 2,children 找到一級子代 3,next 找到下乙個兄弟元素 4,nextall 找到下面所有的兄弟 5,prev 找到上乙個兄弟 6,prevall 找到上面所有的兄弟 7,nextuntil 找到下面的所有兄弟,知道乙個元素為止 8,prev...