C Primer學習 類 類的定義和宣告

2021-06-23 07:10:10 字數 2698 閱讀 6970

在c++中,用類定義抽象資料型別。

一、類定義:

簡單來說,類就是定義了乙個新的型別和乙個新的作用域。

1.類成員

訪問標號:public定義的成員可以被使用該型別的所有**訪問。

private定義的成員可以被其他類成員訪問。

2.建構函式

建立乙個類物件時,編譯器會自動使用乙個建構函式初始化該物件。

建構函式一般使用乙個建構函式初始化列表來初始化資料成員。

sales_item():units_sold(0),revenue(0){}

建構函式初始化列表 由成員名和帶括號的初始值組成,跟在建構函式的形參表之後,以 : 開頭。

3.成員函式

在類內部定義的函式預設為內聯函式(inline)。

在類外部定義的函式必須指明它們是在類的作用域中。

const關鍵字加在形參表之後,就可以將成員函式宣告為常量。

const必須同時出現在宣告和定義中,若只出現在一處,則出現編譯時錯誤!!!

二、資料抽象和封裝

資料抽象:介面和實現分離,類的設計者關心類如何實現,但使用者不必了解這些細節。

封裝是將 低層次的元素組合起來形成新的、高層次實體的技術!

1.訪問標號實施抽象和封裝

1)public標號的成員:程式所有部分都可以訪問。

2)private標號的成員:使用類的**不可以訪問。封裝了型別的實現細節。

【class與struct的區別】

struct:在第乙個訪問標號之前的成員是公有的。

class:在第乙個訪問標號之前的成員是私有的。

【具體型別和抽象型別】

標準庫中pair類是乙個實用的、設計良好的具體類,具體類暴露其實現細節。

2.程式設計角色

好的類設計者會定義直觀和易用的類介面,而使用者只需關心類中影響他們使用的那部分實現。

【註解】

改變標頭檔案中的類定義可有效地改變包含該標頭檔案的每個原始檔的程式文字。so,當類發生改變時,使用該類的**必須重新編譯。

c++語言為類提供了相當多的支援(c with class)

1.同一型別的多個資料成員

類的資料成員宣告類似於普通變數的宣告

2.使用型別別名類簡化類

除了定義資料和函式成員外,類還可以定義自己的區域性型別名(typedef)。此類將是乙個更好的抽象。

3.成員函式可以被過載

成員函式只能過載本類的其他成員函式。

兩個過載成員的形引數和型別不能完全相同。

4.顯式指定inline函式

類內部定義成員函式,預設就是inline函式。但也可以顯式的將成員函式指定為inline。

在宣告和定義處指定inline都是合法的,在類外部定義inline好處是可以使模擬較容易閱讀。

不在類定義體內定義的inline成員函式,其定義通常應放在有類定義的同一標頭檔案中。

四、類宣告和類定義

在給定的原始檔中,乙個類只能被定義一次。如果在多個檔案中定義乙個類,那每個檔案中的定義必須是完全相同的。

//前向宣告

class screen;

在宣告之後、定義之前,類screen是乙個不完全型別,即:已知screen是乙個型別,但不知道包含哪些成員。

不完全型別(incompletetype)只能以有限方式使用。不能定義該型別的物件。只能用於定義指向該型別的指標及引用,或用於宣告使用該型別作為形參型別或返回型別的函式。

在建立類的物件之前,必須完整的定義該類。必須是定義類,而不是宣告類,這樣編譯器就會給類的物件預定相應的儲存空間。同樣,在使用引用或指標訪問類的成員前,必須已經定義類。

為類的成員使用類宣告:

如果該型別是不完全型別,那資料成員只能是指向該類型別的指標或引用。

因為只有當類定義體完成後才能定義類,因此類不能具有自身型別的資料成員。然而,只要類名一出現就可以認為該類已宣告。因此,類的資料成員可以是指向自身型別的資料指標或引用。

class linkscreen

;

類的前向宣告一般用來編寫相互依賴的類。

class y;

class x

;class y

;

五、類物件

定義乙個類時,也就定義了乙個型別。一旦定義了類,就可以定義該型別的物件。定義物件時,將為其分配記憶體空間,但(一般而言)定義型別時不進行儲存分配。

通過類定義出的物件都具有自己的類資料成員的副本。修改其中乙個物件不會改變其他該類物件的資料成員。

1.定義類型別的物件

定義了乙個類型別後,可以按以下兩種方式使用。

1)將類的名字直接用作型別名

2)指定關鍵字class或struct,後面跟類的名字:

//兩條語句作用相同

screen scr;

class screen scr;

2.為啥類的定義以分號結束

因為在類定義之後可以接乙個物件定義列表,所以必須以分號結束:

class sales_item

;class sales_item

ccum,trans;

【最佳實踐】

通常,將物件定義成類定義的一部分是個壞主意!!!這樣,會使所發生的操作難以理解。

c primer 學習筆記 類之類的宣告和定義

封裝是一項低層次的元素組合起來的形成新的 高層次實體珠技術。函式是封裝的一種形式 函式所執行的細節行為被封裝在函式本身這個更大的實體中。被封裝的元素隱藏了它們的實現細節 可以呼叫乙個函式但不能訪問它所執行的語句。同樣地,類也是乙個封裝的實體 它代表若干成員的聚焦,大多數 良好設計的 類型別隱藏了實現...

C Primer 學習日誌 類

本系列部落格用來記錄本小白學習 c primer 5th edition 一書對於書上較為複雜的知識點,或者初看時不能理解的知識點進行解釋和記錄。但並不是對書內各個知識點進行詳解,不適合用於代替書籍學習。語言盡量精簡化。各大佬若發現有錯誤的地方,歡迎指出,謝謝 不定期更新 在c 11新標準中規定,可...

C Primer 學習筆記 IO類

1.ifstream 和istringstream都繼承自istream,因此對三個類的物件的操作相似 2.io物件不能拷貝不能賦值 io操作的函式形參和返回值型別不能為流型別 進行io操作的函式常以引用方式傳遞和返回流,且不能為const 條件狀態 cin word 如果輸入成功,流會保持有效狀態...