C 複習筆記(總結每乙個小的知識點,經常更新)

2021-08-19 18:01:26 字數 4660 閱讀 3471

類和物件的特性

1.物件

客觀世界中任何乙個事物都可以看成乙個物件,任何乙個物件都應該具有屬性和行為。物件應能根據外界給的訊息進行相應的操作,乙個物件一般有一組屬性和一組行為構成。

資料體現了前面提到的屬性,函式是用來對資料進行操作的,以便實現某些功能。

2.封裝與資訊隱蔽

可以對乙個物件進行封裝處理,把它的一部分屬性和屬性對外界遮蔽,也就是說外界是看不到的,甚至不可知的。把物件的內部實現和外部行為分割開來。

3.抽象

抽象的作用是表示同一類事物的本質。類是物件的抽象,而物件則是類的特例,也可以說是類的具體表現形式。

4.繼承和重用

繼承可以在原來已經有的類的基礎上加上自己想要的屬性,增加了程式的復用性,節省了程式設計工作量,不僅可以利用自己過去做好的類,還可以使用別人使用的

類或者存在類庫中的類

5.多型性

由繼承而產生的相關的不同的類,其物件對同一訊息會做出不同的響應。多型性是物件導向程式設計的乙個重要特徵,能增加程式的靈活性。

2.1.3 類和物件的作用

c++支援面向過程的程式設計,也支援基於物件和物件導向的程式設計

基於物件就是基於類

基於物件的程式是以類和物件為基礎的,程式的操作是圍繞物件進行的

一組資料和一組操作相對應的。因此人們攝像相關的資料和操作1放在一起,形成乙個整體,與外界相對分隔,這就是物件導向的程式設計中的物件。

程式=演算法+資料結構

物件=演算法+資料結構

程式=(物件+物件+物件.....)+訊息

程式=物件s+訊息

訊息的作用就是對物件的控制,程式設計的關鍵是設計好每乙個物件,以及確定向這些物件發出的命令,以使個物件完成相應的操作。

2.1.4 物件導向的軟體開發

1.物件導向分析

2.物件導向設計

3.物件導向程式設計

4.物件導向測試

5.物件導向維護

2.3.4 成員函式的儲存方式

同一類的不同物件的資料成員的值一般是不相同的,而不同物件的函式的**是相同的,不論呼叫哪乙個物件的函式的**,其實呼叫的都是同樣內容的**

函式的**放在了共享區域,公共**段,因此乙個物件所佔的空間大小值取決於該物件中資料成員所佔的空間,而與成員函式無關

(1)不要將成員函式的儲存方式和inline 函式混淆

(2)不論是否用 inline 宣告,成員函式的**都不占用物件的儲存空間 ,inline 函式只影響程式的執行效率

2.4 物件成員的引用

通過物件名和成員運算子訪問物件中的成員

通過指向物件的指標訪問物件中的成員

通過物件的引用訪問物件中的成員

2.5類的封裝性和資訊隱蔽

在類外雖然不允許直接訪問私有資料成員,但可以通過共用成員函式來引用甚至修改私有資料成員

共用成員函式是使用者使用類的共用介面

當介面與實現分離時,只要類的介面沒有被改變,對私有實現的修改不會引起程式的其他部分的修改

怎樣使用類和物件

3.1 利用建構函式和類物件進行初始化

在c++中不能對類的物件直接在類中進行初始化,所以只能通過建構函式進行初始化,建構函式是一種特殊的成員函式,不需要使用者來呼叫它,而是在建立物件時自動呼叫,必須和類同名

建構函式沒有返回值,它的作用只是對物件進行初始化

建構函式不能被使用者顯式地呼叫

如果使用者沒有定義建構函式,那麼系統會自動生成,但是我們要知道系統生成的建構函式不執行初始化操作,所以,為了簡化**,我覺得最好是自己設計

建構函式

帶引數的建構函式

如果想要對不同的引數賦初值,那就需要採用帶引數的建構函式

建構函式名(型別1 形參1,型別2 形參2)通過使用者給出的實參,傳遞給形參

3.1.4 用引數初始化表對資料成員初始化

類名::建構函式名([參數列])[:成員初始化表]

建構函式的過載

如果想要對不同個數的引數進行初始化,那就需要對建構函式進行過載

無參建構函式屬於預設建構函式,乙個類只能有乙個預設建構函式

使用預設引數的建構函式

它提供了建立物件時的多種選擇,它的作用相當於好幾個過載的建構函式,在宣告建構函式時指定預設值,而不能只在定義建構函式時指定預設值

如果建構函式的全部引數都指定了預設值,則在定義物件時可以給乙個或幾個實參,也可以不給出實參

析構函式

當物件的生命週期結束,會自動呼叫析構函式

(1)如果在函式中定義了乙個物件,當這個物件被呼叫結束時,物件應該釋放,在物件釋放前自動呼叫析構函式

(2)靜態區域性物件在函式呼叫結束時物件並不釋放,只有當main函式結束或呼叫exit函式結束程式時,才呼叫析構函式

(3)如果是全域性物件,那就需要等到出了檔案作用域再呼叫析構函式

(4)如果是new出來的乙個物件,當用delete運算子釋放該物件時,先呼叫該物件的析構函式

(5)析構函式的作用不是刪除物件,而是在撤銷物件占用的記憶體之前做一些清理工作,使這部分記憶體可以重新被新的物件使用

(6)析構函式不返回任何值,沒有函式型別,也沒有函式引數

(7)析構函式因為沒有函式引數,因此也不能被過載

(8)乙個類可以有多個建構函式,但是只能有乙個析構函式

(9)如果使用者沒有定義析構函式,那麼系統也會自動生成,但是並不會執行任何操作

(10)先構造的後析構,先析構的後構造

(11)兩個物件的儲存類別不同,生命週期不同,因此呼叫析構函式的順序也可能不同,但是建構函式的呼叫一定是先定義先呼叫

3.4 物件陣列

物件陣列中的每乙個元素都是同類的物件

編譯系統只為每個物件元素的建構函式傳遞乙個實參,所以在定義陣列時提供的實參個數不能超過陣列元素個數

可以像結構體一樣對物件陣列進行初始化,使用{}隔開

3.5 物件指標

乙個物件儲存空間的起始位址就是物件的指標,可以定義乙個指標,用來存放物件的位址,這就是指向物件的指標變數

3.5.2指向物件成員的指標

物件有位址,那麼物件的成員也就有位址,存放物件成員的位址的指標變數就是指向物件成員的指標變數

函式指標 void (*p)()

成員函式指標  void(time::*p2)

p2 = &time::get time()

只想當前物件的this 指標,它是指向本類的指標,它的值是當前被呼叫的成員函式所在的物件的起始位址

3.6 共用資料的保護

常物件

time const t1(12,23,34);

在t1的生命週期中,物件t1中的資料成員的值都不能被修改

定義常成員之前必須同時對之初始化,之後不能被改變

(1)如果乙個物件被宣告為常物件,則通過該物件只能呼叫它的常成員函式

(2)常成員函式可以訪問常物件中的資料成員,但不允許修改常物件中資料成員的值

(3)只能通過建構函式的引數初始化表對常資料成員進行初始化,任何其他函式都不能對常資料成員賦值

(4)如果將成員函式宣告為常成員函式,則只能引用本類中的資料成員,而不能修改他們

void get_time ()const;

(5)常成員函式可以引用const資料成員,也可以引用非const的資料成員

(6)常資料成員可以被常函式引用,也可以被非常函式引用

(7)如果已經定義了乙個常物件,只能呼叫其中的常成員函式,而不能呼叫非常成員函式

(8)常成員函式不能呼叫非常成員函式

3.6.3 指向物件的常指標

time t1(12,12,13)

time *const ptr1;

ptr1= &t1;

指向物件的常指標變數的值是不能被修改的,始終只能指向乙個物件,這點和引用是類似的。

3.6.4  指向常物件的指標變數

const char *ptr

const 型別名 *指標變數名

(1)如果乙個變數已被宣告為常變數,只能用指向常變數的指標變數指向它

(2)指向常變數的指標變數可以指向常變數也可以指向指向普通變數,但是此時就不能通過此指標變數改變該變數的值,這相當於許可權縮小

(3)指向非const 變數的指標只能指向非const 變數

(4)指向常物件的指標最常用於函式的形參,目的是在保護形參指標所指向的物件,使它在函式執行過程中不被修改

(5)當希望在呼叫函式時物件的值不被修改,就應當把形參定義為指向常物件的指標變數,同時用物件的位址做實參。

C 複習小知識點總結

一 c 純虛函式和抽象類詳解 1 在c 中,可以將虛函式宣告為純虛函式,語法格式為 virtual 返回值型別 函式名 函式引數 0 最後的 0並不表示函式返回值為0,它只起形式上的作用,告訴編譯系統 這是純虛函式 包含純虛函式的類稱為抽象類 抽象類通常是作為基類,讓派生類去實現純虛函式。派生類必須...

C 知識點總結複習

c 1 c 是靜態型別語言,使用靜態型別的程式語言是在編譯時執行型別檢查,而不是在執行時執行型別檢查。2 物件導向程式設計 c 完全支援物件導向的程式設計,包括物件導向開發的四大特性 3 基礎語法 a.c 是區分大小寫的程式語言 b.三字元組就是用於表示另乙個字元的三個字串行,又稱為三字串行。三字串...

c 知識點小總結

static inline 指標與引用 零碎知識點 修飾符,代表所修飾的型別的物件 變數不可更改。預設檔案區域性變數。普通變數預設為extern 定義時必須初始化。初始化之後不能更改。指標指向const物件 const 指標本身的值可更改。可指向非const物件。但不能通過這個指標更改其所指物件的值...