c 入門筆記(一)

2022-06-06 18:33:09 字數 2674 閱讀 5313

c++ 新增兩個關鍵字,new 和delete:new 用來動態分配記憶體,delete 用來釋放記憶體

和malloc() 一樣,new 也是在堆區分配記憶體,必須手動釋放,否則只能等到程式執行結束由作業系統**。為了避免記憶體洩露,通常new 和delete、new 和delete 操作符應該成對出現。

乙個c++ 程式的執行過程可以認為是多個函式之間的相互呼叫過程,它們形成了乙個或簡單或複雜的呼叫鏈條,這個鏈條的起點是main(),終點也是main()。當main() 呼叫完了所有的函式,它會返回乙個值(例如return 0;)來結束自己的生命,從而結束整個程式。

函式呼叫是有時間和空間開銷的。

內聯函式(在函式定義處增加inline關鍵字):

當函式比較複雜時,函式呼叫的時空開銷可以忽略,大部分的cpu時間都會花費在執行函式體**上,所以我們一般是將非常短小的函式宣告為內聯函式。

c++規定,預設引數只能放在形參列表的最後,而且一旦為某個形參指定了預設值,那麼它後面的所有形參都必須有預設值。

定義:過載就是在乙個作用範圍內(同乙個類、同乙個命名空間等)有多個名稱相同但引數不同的函式。過載的結果是讓乙個函式名擁有了多種用途,使得命名更加方便(在中大型專案中,給變數、函式、類起名字是一件讓人苦惱的問題),呼叫更加靈活。

函式列表:又叫做函式簽名,包括引數的型別、引數的個數和引數的順序,只要有乙個不同就叫做引數列表不同

函式的過載的規則:

c++是如何做到函式過載的:c++**在編譯時會根據引數列表對函式進行重新命名。當發生函式呼叫時,編譯器會根據傳入的實參去逐個匹配,以選擇對應的函式,如果匹配失敗,編譯器就會報錯。(這叫做-過載協議)

定義:類是建立物件的模板,乙個類可以建立多個物件,每個物件都是類型別的乙個變數;建立物件的過程也叫類的例項化。每個物件都是類的乙個具體例項(instance),擁有類的成員變數和成員函式。注意在類定義的最後有乙個分號

;,它是類定義的一部分,表示類定義結束了,不能省略。

定義:一種特殊的成員函式,它的名字和類名相同,沒有返回值,不需要使用者顯示呼叫。而是在建立物件時自動執行。

特性:定義:建立物件時系統會自動呼叫建構函式進行初始化工作,同樣,銷毀物件時系統也會自動呼叫乙個函式來進行清理工作,例如釋放分配的記憶體、關閉開啟的檔案等,這個函式就是析構函式。

特點:符號。

this 是乙個指標,要用->來訪問成員變數或成員函式。

this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給this。不過this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。

幾點注意:

常成員函式需要在宣告和定義的時候在函式頭部的結尾加上const 關鍵字。需要強調的是,必須在成員函式的宣告和定義處同時加上const 關鍵字。

區分一下const 的位置:

在編寫c++**時,強烈建議使用class 來定義類,而使用struct 來定義結構體,這樣做語義更加明確。

型別不同:單引號表示型別為字元型別;雙引號表示型別為字串型別

資料長度不同:單引號的資料長度固定,因為只有乙個字元,所以資料長度為1;雙引號的資料長度不固定,由字串的字元數量決定

尾部不同:單引號只有乙個字元,不會在字元尾部新增』\0』結尾;雙引號,系統會將雙引號裡的字串內容的尾部自動新增』\0』結尾

引數的傳遞本質上是一次賦值的過程,賦值就是對記憶體進行拷貝。所謂記憶體拷貝,是指將一塊記憶體上的資料複製到另一塊記憶體上。

引用在定義時需要新增&,在使用時不能新增&。使用時新增&表示取位址。

sample:class student: public people

多繼承:

在多繼承中,如果幾個基類中有相同的成員變數,編譯器就會產生歧義。為了消除歧義,可以在引用的前面指明它具體來自哪個類(::)

為了解決多繼承時的命名衝突和冗餘資料問題,c++

提出了虛繼承,使得在派生類中只保留乙份間接基類的成員。在繼承方式前面加上virtual 關鍵字就是虛繼承。

重寫=覆蓋=override

不同的範圍,分別位於基類和派生類中

函式的名字相同

引數相同(必須有相同的型別、名稱、引數列表)

基類函式必須有

virtual關鍵字(被重寫的函式不能是static的)

過載=overload

相同的範圍(在同乙個類中,實現若干過載的方法)

函式的名字相同

形參列表不同

virtual關鍵字可有可無

重定義派生類對基類的成員函式重新定義,即派生類定義了某個函式,該函式的名字與基類中函式名字一樣。

重定義也叫做隱藏,子類重定義父類中有相同名稱的非虛函式(引數可以不同)。如果乙個類,存在和父類相同的函式,那麼這個類將會覆蓋其父類的方法,除非你在呼叫的時候,強制轉換為父類型別,否則試圖對子類和父類做類似過載的呼叫時不能成功的。

重定義需要注意:

不在同乙個作用域(分別位於基類、派生類)

函式的名字必須相同

對函式的返回值、形參列表無要求

若派生類定義該函式與基類的成員函式完全一樣(返回值、形參列表均相同),且基類的該函式為virtual,則屬於派生類重寫基類的虛函式

若重新定義了基類中的乙個過載函式,則在派生類中,基類中該名字函式(即其他所有過載版本)都會被自動隱藏,包括同名的虛函式

多型的概念比較複雜,一種不嚴謹的說法是:繼承是子類使用父類的方法,而多型是父類使用子類的方法。

C語言基礎入門一(自學筆記)

int型 儲存要佔1個機器字長,16位機器,範圍 32768 32767目前大多數機器32位,即佔4個位元組,儲存數字範圍為 2147483648 2147483647 short型 儲存小於等於int,32768 32767 long型 儲存大於等於int,2147483648 214748364...

C 學習筆記(c 入門)

經常忙碌的我,今天也有時間學習自己感興趣的c 程式語言了,首先我要記錄這個有意義的時間 2016年6 月6日星期一。那麼學習c 之前,我們先要了解什麼是 c 語言,簡單地說,c 語言是一種在 c語言基礎上被提出來的計算機程式語言,與 c語言一樣,c 語言在計算機的語言中分類屬於 高階語言 也就是一種...

c 入門經典筆記

c 中的優先順序 命名空間概念 命名空間是一種邏輯上的劃分,而不是物理上的劃分。這種劃分方法有些類似於檔案的儲存方式。c 命名規範 1 類名,方法名和屬性名都用pascal命名法,即所有單詞連寫,每個單詞的第乙個字母大寫,其他字母小寫 2 變數名,一般物件名,控制項物件名和方法的引數名均用camel...