C 複習提綱

2023-01-14 10:18:05 字數 4668 閱讀 3710

與c++的關係

c++是從c語言發展演變而來的。全面相容c,它保持了c的簡潔、高效和接近組合語言等特點,對c的型別系統進行了改革和擴充,c++也支援面向過程的程式設計,不是乙個純正的物件導向的語言。

p20 2.1.2 第一段到第五段

2.物件的概念

物件導向方法中的物件:

是系統中用來描述客觀事物的乙個實體,它是用來構成系統的乙個基本單位。物件由一組屬性和一組行為構成。

屬性:用來描述物件靜態特徵的資料項。

行為:用來描述物件動態特徵的操作序列。

具體見p4

在c++中,類的物件就是該類的某一特定實體(也稱例項)。

3.識別符號的組成

程式設計師宣告的單詞,它命名程式正文中的一些實體。規則同c語言。

p22 2.識別符號那一段

4.類的成員函式

函式的原型宣告要寫在類體中,原型說明了函式的參數列和返回值型別。而函式的具體實現是寫在類的定義之外。與普通函式不同的是,實現成員函式時要指明類的名稱。

使用.操作符指出呼叫所針對的物件,這一物件在本次呼叫中稱為目的物件。

具體見p104

5.作用域運算子的功能

作用域是乙個識別符號在程式正文中有效的區域。c++中識別符號的作用域有函式原型作用域,區域性作用域(塊作用域)、類作用域和命名空間作用域。

具體見p146

6.友元的作用

友元是c++提供的一種破壞資料封裝和資料隱藏的機制。通過將乙個模組宣告為另乙個模組的友元,乙個模組能夠引用到另乙個模組中本是被隱藏的資訊。可以使用友元函式和友元類。

為了確保資料的完整性,及資料封裝與隱藏的原則,建議盡量不使用或少使用友元。

友元關係提供了不同類或物件的成員函式之間、類的成員函式與一般函式之間進行資料共享的機制。

具體見p158

7.引用與指標的區別(純百度,希望大家自行理解,或者在書上使勁找找)

從概念上講。指標從本質上講就是存放變數位址的乙個變數,在邏輯上是獨立的,它可以被改變,包括其所指向的位址的改變和其指向的位址中所存放的資料的改變。

而引用是乙個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的物件在其整個生命週期中是不能被改變的(自始至終只能依附於同乙個變數)。

在c++中,指標和引用經常用於函式的引數傳遞,然而,指標傳遞引數和引用傳遞引數是有本質上的不同的:

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。

而在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。

引用傳遞和指標傳遞是不同的,雖然它們都是在被調函式棧空間上的乙個區域性變數,但是任何對於引用引數的處理都會通過乙個間接定址的方式操作到主調函式中的相關變數。而對於指標傳遞的引數,如果改變被調函式中的指標位址,它將影響不到主調函式的相關變數。如果想通過指標引數傳遞來改變主調函式中的相關變數,那就得使用指向指標的指標,或者指標引用。

為了進一步加深大家對指標和引用的區別,下面我從編譯的角度來闡述它們之間的區別:

程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用在符號表上對應的位址值為引用物件的位址值。符號表生成後就不會再改,因此指標可以改變其指向的物件(指標變數中的值可以改),而引用物件則不能修改。

最後,總結一下指標和引用的相同點和不同點:

★相同點:

●都是位址的概念;

指標指向一塊記憶體,它的內容是所指記憶體的位址;而引用則是某塊記憶體的別名。

★不同點:

●指標是乙個實體,而引用僅是個別名;

●引用只能在定義時被初始化一次,之後不可變;指標可變;引用「從一而終」,指標可以「見異思遷」;

●引用沒有const,指標有const,const的指標不可變;

●引用不能為空,指標可以為空;

●「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;

●指標和引用的自增(++)運算意義不一樣;

●引用是型別安全的,而指標不是 (引用比指標多了型別檢查)

8.派生類的概念

保持已有類的特性而構造新類的過程稱為繼承。在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。被繼承的已有類稱為基類(或父類)。派生出的新類稱為派生類。

具體見p252 7.1.2

9.派生類對基類的訪問機制及許可權

不同繼承方式的影響主要體現在:派生類成員對基類成員的訪問許可權,通過派生類物件對基類成員的訪問許可權。

三種繼承方式:公有繼承,私有繼承,保護繼承

● 公有繼承:基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的private成員不可直接訪問。派生類中的成員函式可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。

通過派生類的物件只能訪問基類的public成員。

● 私有繼承:基類的public和protected成員都以private身份出現在派生類中,但基類的private成員不可直接訪問。派生類中的成員函式可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。

通過派生類的物件不能直接訪問基類中的任何成員。

● 保護繼承:基類的public和protected成員都以protected身份出現在派生類中,但基類的private成員不可直接訪問。派生類中的成員函式可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。

通過派生類的物件不能直接訪問基類中的任何成員。

● protected成員的特點與作用:對建立其所在類物件的模組來說,它與 private 成員的性質相同。對於其派生類來說,它與 public 成員的性質相同。

既實現了資料隱藏,又方便繼承,實現**重用。

具體見p256-p262

10.虛基類的目的是什麼

作用:主要用來解決多繼承時可能發生的對同一基類繼承多次而產生的二義性問題。為最遠的派生類提供唯一的基類成員,而不重複產生多次拷貝。

注意:在第一級繼承時就要將共同基類設計為虛基類。

具體見p276

11.純虛函式和抽象類有什麼關係

抽象類是帶有純虛函式的類。

● 純虛函式是乙個在基類中申明的虛函式,它在該基類中沒有定義具體的操作內容,要求各派生類根據實際需要給出各自的定義。

● 抽象類不能例項化。

具體見p321

指標this指標式乙個隱含於每乙個類的非靜態成員函式中的特殊指標(包括建構函式和析構函式),它用於指向正在被成員函式操作的物件。

具體見p214和this指標專題ppt

13.編寫c++程式經歷的步驟(不知道對不對)

分析設計程式設計測試維護

p514.資料封裝

把物件的屬性和服務結合成乙個獨立的系統單位,盡可能隱蔽物件的內部細節。

1) 把物件的全部屬性和全部服務結合在一起,形成乙個不可分割的獨立單位。

2) 「資訊隱蔽」,即盡可能隱藏物件的內部細節,對外形成乙個邊界(或者說一道屏障),只保留有限的對外介面使之與外部發生聯絡。

具體見p4

15.過載運算子

運算子過載是對已有的運算子賦予多重含義,使同乙個運算子作用於不同型別的資料時導致不同的行為。

● 運算子過載的規則:c++中的運算子除了類屬關係運算子「.」、成員指標運算子「.

*」、作用域分辨符「::」和三目運算子「?:」外,全部可以過載,而且只能過載c++中已經有的運算子。

過載之後運算子的優先順序和結合性都不會改變。不能改變原運算子的操作物件個數,同時至少要有乙個操作物件是自定義型別。

● 運算子過載為成員函式及非成員函式

具體見p307-314

16.公有類派生物件和成員分別如何訪問基類成員。

派生類中的成員函式可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。

通過派生類的物件只能訪問基類的public成員。

17.預處理過程(在哪個過程之前還是之後)

在編譯器對源程式進行編譯之前,先要進行預處理過程。

18.類的預設訪問許可權是什麼(百度的。。)

就是預設訪問許可權。例如:類的資料成員,預設是私有的。

19.單繼承與多繼承的關係

乙個派生類,可以同時有多個基類,這種情況被稱為多繼承。乙個派生類只有乙個直接基類的情況,稱為單繼承。

單繼承可以看作是多繼承的乙個最簡單的特例,多繼承可以看作是多個單繼承的組合,它們之間的很多特性是相同的。

見p253

20.二義性(什麼情況下會出現,出現後的方法是什麼)

◆ 出現:在多繼承時,基類與派生類之間,或基類之間出現同名成員時,將出現訪問時的二義性(不確定性)——採用虛函式(參見第8章)或同名隱藏規則來解決。當派生類從多個基類派生,而這些基類又從同乙個基類派生,則在訪問此共同基類中的成員時,將產生二義性——採用虛基類來解決。

◆ 解決方法:

1) 用類名來限定: 或

2) 同名隱藏:在c 中宣告乙個同名成員函式f(),f()再根據需要呼叫a::f或b::f()

c 總複習提綱

一 知識點 1 三種主要的程式結構 順序 分支 迴圈 2 類的定義與使用 3 類的繼承與派生 4 c 的多型性 1 靜態多型性 函式的覆蓋與過載 運算子過載 2 動態多型性 虛函式 5 指標與引用 6 檔案 1 文字檔案 建立 讀 寫 關閉 2 二進位制檔案 建立 移動指標 讀 寫 讀 寫 關閉7 ...

C語言複習提綱 1 1

考試時間 120分鐘 題型 一 單項選擇題 每小題1分,共20分 二 填空題 每空2分,共20分 三 讀下列程式,寫出程式的執行結果 每小題5分,共30分 四 程式設計題 每小題10分,共30分 複習題 1 include void main void main b b s k 0 a a s k ...

C 複習提綱 個人心得

第一章 了解c 程式的構成和執行 第二章 掌握 c 的資料型別,常量的表示,變數的定義 算術表示式 賦值表示式 逗號表示式的運算 第三章 重點 順序結構 選擇結構 迴圈結構程式的編寫,c 的輸入與輸出掌握 關係運算和邏輯運算,break continue語句不考 3.1,3.4.2 3.4.4 第四...