2012國慶回來複習 筆記整理

2022-02-22 18:26:20 字數 2414 閱讀 8616

記憶體分配有三種方式

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()

另外,用基類指標來呼叫一般成員函式(非虛函式)總是靜態呼叫

基類指標和派生類指標 之間的 轉換

派生類指標可以直接轉化為基類指標:

但是倒過來,基類指標不能隱式地轉換成派生類指標,如果一定要,那麼就是用強制型別轉換,並且這種方式不保證一定成功。

關於派生類和基類直接的轉換**

#includeusing

namespace

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...