linux c c 知識點整理 一

2021-07-31 00:07:39 字數 1661 閱讀 2532

在c++中,申請動態記憶體是使用new和delete,這兩個關鍵字實際上是運算子,並不是函式。

而在c中,申請動態記憶體則是使用malloc和free,這兩個函式是c的標準庫函式,使用它們必須包含stdlib.h,才能編譯通過。

new/delete和malloc/free的相同之處在於,new和malloc都是手動申請動態記憶體,釋放時new則需要delete釋放記憶體,而malloc則需要free釋放記憶體。

它們的不同之處在於,new和delete會自動呼叫物件的構造和析構函式,而malloc/free則只申請記憶體。

另外需要注意的是:new的不是陣列的話,則直接delete就好,並且只會呼叫一次析構函式,而new的話,則需使用delete來釋放,並且陣列中每乙個元素都會呼叫一次析構函式,呼叫完析構函式再釋放記憶體。

優點:類繼承是在編譯時刻靜態定義的,且類繼承可以較方便地改變父類的實現,實現函式的重用。

缺點:首先,因為繼承在編譯時刻就定義了,所以無法在執行時改變從父類繼承的實現,其次,父類一般至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為,也就是說,如果繼承下來的實現不適合子類的問題,那麼父類必須重寫或者被其他的類替換,這種依賴關係限制了靈活性。

從以上對比看,同一種屬性既可以是優點,從另外的方面來講,又是缺點,就看個人在程式設計過程中的靈活運用了。

封裝、繼承、多型。

封裝是一種技術,它使類的定義和實現分離;

繼承,從廣義上講,繼承有三種實現方式,其一,為實現繼承,指使用基類的屬性和方法而無需額外編碼,其二,可視繼承,即子窗體使用父窗體的外觀和實現**,其三,則為介面繼承,即僅僅繼承屬性和方法,實現則滯後到子類去實現,也就是父類使用的是純虛函式,或者重寫父類介面方法,則是虛函式,例如多型的實現就使用了介面繼承。

多型,簡單來講,就是父類定義了虛函式,子類重新實現該函式,那麼當父類指標指向子類時,會呼叫子類的該方法,這,就是多型。

子類物件定義時,先呼叫父類的建構函式,再呼叫子類的建構函式;

子類物件銷毀時,先呼叫子類的析構函式,再呼叫父類的析構函式。

引用,其實就是給變數取了乙個別名,宣告引用時要切記初始化,且引用本身不佔儲存單元,純粹就是變數多了乙個名稱而已。

一是,使用引用傳遞引數是直接對實參本身進行操作,當需要在函式內部修改傳遞進來的變數並傳出去時,可使用引用;

二來,引用是無需重新分配儲存空間的,但指標卻需要,所以有時使用引用會更有效率;

當既要使用引用提高程式的效率,又不能在函式內部修改實參的值時,可使用常引用。

好處:在記憶體中不產生被返回值的副本

需遵循的規則:

(1)不能返回區域性變數的引用;

(2)不能返回函式內部動態分配的變數的引用,因為引用只是作為乙個臨時變數的出現,並未賦予乙個實際的變數,該引用所指向的空間無法被釋放;

(3)可以返回類成員的引用,但最好是const型別;

(4)為了保證連續使用流操作符(<< >>)過載返回值時,操作的是同乙個物件,流操作符過載返回值應該宣告為引用

(5)+-*/這四則運算符不能返回引用

引用是c++中另外一種實現多型的手段,與指標一樣,也是基類的引用可指向派生類的例項。

指標通過某個指標變數指向某個物件後,對指標所指向的物件間接操作;

引用本身就是變數的別名,所以對引用操作就是直接對所指向的變數進行操作;

引用不會重新分配儲存空間,但指標卻需要重新分配儲存空間;

linux c c 知識點整理 三

過載即為函式過載,過載的特徵 1 相同的範圍,也就是在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字無影響 覆蓋是指派生類函式覆蓋基類函式,覆蓋的特徵 1 不同的範圍,即函式分別位於派生類和基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字 隱藏是指派...

linux c c 知識點整理 四

當實際長度不夠時,右對齊 如果字串或者整數的長度超過說明的場寬,則按其實際長度輸出 如果是浮點數,若整數部分超過了說明的整數字場寬,則按其實際長度輸出,若是小數部分超過了說明的小數字場寬,則按說明的寬度以四捨五入輸出。例如 printf d d d n a,b,c b,c 那麼將輸出才c,b,c這3...

知識點整理

一 標準庫容器和演算法 1.順序容器 與前面類似 2.關聯容器 map和multimap 元素包含key 鍵 和值 value 兩部分 按照鍵對元素排序 map不允許重複元素出現,但multimap可以 set和multliset 是包含已排序物件的關聯容器 只是單純的鍵的集合 set不允許重複鍵出...