類與物件複習總結1

2021-08-19 07:16:07 字數 4203 閱讀 9080

一.類的定義

*類是對具有相同屬性和行為的一組物件的抽象與統一描述

*類的定義包括行為和屬性兩個部分

*屬性以資料成員表示,行為通過成員函式實現

定義格式

class 類名

;

注意:

*類的成員可以是其他類的物件,但不能以類自身的物件作為本類的成員,而類自身的指標和引用可以作為類的成員

*類定義必須以分號「;"結束

*類與結構體的區別:

沒有明確指定類成員的訪問許可權時,c++結構體的成員是公有的,而類的成員是私有的

類的訪問屬性

public  公有成員  類的外部介面

protected  保護成員  僅允許本類成員及派生類成員函式訪問

private  私有成員 僅允許本類成員函式訪問

二.成員函式

類的成員函式是實現類的行為屬性的成員

一般將成員函式宣告為函式原型(在類內進行宣告),在類外具體實現成員函式(在類外定義)

成員函式的定義

返回值型別 類名::成員函式名(參數列) 

注意:

1.在類的定義中不能對資料成員進行初始化

2.類的任何成員都必須指定訪問屬性,一般將資料成員定義為私有或保護成員,將成員函式定義為公有成員

3.類中的資料成員可以是c++語法規定的任意資料型別

4.類的成員可以是其他類的物件,成為類的組合,但不能以類自身的物件作為本類的成員

5.類定義必須以分號結束

6.class,成員預設情況是private;struct中成員預設情況是public

重要的成員函式:

1.建構函式

建構函式是用於建立物件的特殊成員函式,當建立物件時,系統自動呼叫建構函式

建構函式的作用:為物件分配空間;對資料成員賦初值;請求其他資源

沒有使用者定義的建構函式時,系統提供預設版本的建構函式,建構函式名與類名相同

析構函式可以有任意型別的引數,但沒有返回型別,可以進行過載

**物件:物件是類的例項或實體,類與物件的關係,如同c++基本資料型別和該型別的變數之間的關係

定義格式: 類名   物件名1,物件名2......;必須在定義了類之後,才可以定義類的物件

**函式過載:函式名相同,但引數不相同的一組函式,編譯器根據不同的引數型別和個數呼叫這組函式 用於處理不同資料型別的類似任務

2.複製建構函式

用乙個已有同類物件建立新物件進行資料初始化,保護實參物件唯讀

c++為類提供預設版本的複製建構函式

程式設計師可以定義使用者版本的複製建構函式 語法形式   類名::類名(const 類名&引用名,....);

淺複製與深複製:

在用乙個物件初始化另乙個物件時,只複製了資料成員,而沒有複製資源,使兩個物件同時指向了同一資源的複製方式為淺複製

即:對於複雜型別的資料只複製了儲存位址而沒有複製儲存內容,預設建構函式所進行的是簡單資料複製,即淺複製。

通過乙個物件初始化另乙個物件時,不僅複製了資料成員,也複製了資源的複製方式叫做深複製

2.析構函式

析構函式是用於取消物件的成員函式,當乙個物件作用域結束後,系統自動呼叫析構函式

析構函式的作用:進行消亡物件的清理工作

沒有使用者定義的析構函式時,系統提供預設版本的析構函式,析構函式名:~類名,析構函式沒有引數和返回型別

通常利用建構函式建立物件有兩種方法

(1).利用建構函式直接建立物件,其一般形式為:類名   物件名[(實參表)];

(2).利用建構函式建立物件時,通過指標和new來實現,語法形式:類名  *指標變數名=new類名[(實參表)];

例如:date  *date1=new date(1998,4,28);

就建立了物件(*date1)

建構函式初始化成員的兩種方式

a.使用建構函式的函式體進行初始化

class date  

};

b.使用建構函式的初始化列表進行初始化

class date  

};

必須使用引數初始列表對資料成員進行初始化的幾種情況:資料成員為常量、資料成員為引用型別、資料成員為沒有無參建構函式的類的物件

類按照資料成員在類中的宣告順序進行初始化,與初始化列表中出現的順序無關

三.類的其他成員

1)常成員

常資料成員是指資料成員在例項化被初始化後,其值不能改變

在類的成員函式後面可以加const關鍵字,則該成員稱為常成員函式

class student  

;

2)常物件

如果在說明物件時用const修飾,則被說明的物件為常物件

常物件的說明方式:類名  const  物件名[(參數列)];或者const  類名  物件名[(參數列)];

在定義常物件時必須進行初始化,而且不能被更新

c++不允許直接或間接更改常物件的資料成員

c++規定常物件只能呼叫它的常成員函式、靜態成員函式、建構函式(具有公有訪問許可權)

3)常成員函式

在類中使用關鍵字const說明的函式為常成員函式,

說明格式:型別說明符 函式名(參數列)const

4)靜態成員

類成員冠以static宣告時,稱為靜態成員

靜態資料成員為同類物件共享

靜態成員函式與靜態資料成員協同操作

靜態成員不屬於某乙個單獨的物件,而是為類的所有物件所共有

靜態成員函式的作用:不是為了物件之間的溝通,而是為了能處理靜態資料成員:在保證不依賴於某個物件的前提下,訪問靜態資料成員

靜態資料成員宣告及初始化:

在類外進行靜態資料成員的宣告:型別 類名::靜態資料成員[=初始化值];//必須進行宣告

不能在成員初始化列表中進行初始化

如果未進行初始化,則編譯器自動賦初值預設值為0,初始化時不能使用訪問許可權

設計包含靜態資料成員和靜態成員函式的類:

某商店經銷一種貨物,貨物成箱進,成箱賣出,購進和賣出都是以重量為單位(每箱的重量不同),商店需記錄下存貨的總重量

分析:定義乙個

貨物類,表示一箱貨物,類中包含私有成員 weight;

乙個靜態資料成員total_weight;

定義in函式,表示進貨,進貨時

total_weight的值增加

定義out函式,表示出貨,出貨時

total_weight的值減少

定義靜態函式display_store()函式,顯示當前的庫存貨物總重量

#includeusing namespace std;

class goods

void in()

void out()

static void display_store(){cout《說明:

1.靜態成員函式在類外定義時不用static字首

2.靜態成員函式主要用來訪問同一類中的靜態資料成員

3.私有靜態成員函式不能在類外部或用物件訪問

4.可以在建立物件之前處理靜態資料成員

5.編譯系統將靜態成員函式限定為內部連線(在其他檔案中不可見)

6.靜態成員函式中沒有this指標

7.靜態成員函式不訪問類中的非靜態資料成員,如有需要,只能通過物件名(或指向物件的指標)訪問該物件的非靜態成員

***this指標

需要this指標的三種情況

1.在類的非靜態成員函式中返回類物件本身或物件的引用的時候,直接使用return *this;返回本物件的位址時,return this

2.當引數與成員變數名相同時,如this->x=x,不能寫成x=x

3.避免對同一物件進行賦值操作,判斷兩個物件是否相同時,使用this指標

友元函式

如果在本類(類a)以外定義了乙個函式(函式b),這個函式可以是不屬於任何類的非成員函式,也可以是體其他類的成員函式

在類體中用friend對其(函式b)進行宣告,此函式就稱為本類(類a)的友元函式,可以訪問這個類的私有成員

類的包含(類的組合)

**類的包含是程式設計中一種軟體重用技術,即定義乙個新的類時,通過編譯器把另乙個類「抄進來」

**當乙個類中含有已經定義的類型別成員,帶引數的建構函式對資料成員初始化,需使用初始化語法格式

建構函式(形參表):物件成員1(形參表),....

物件陣列

指每一陣列元素都是物件的陣列

定義格式:類名 陣列名[下標表示式];

類與物件複習總結

類是對具有相同屬性和行為的一組物件的抽象與統一描述。是使用者自定義的資料型別,類包括行為與屬性兩部分,屬性以資料成員表示,行為通過成員函式實現。c 中預設類的成員訪問許可權是私有的,成員函式重點是對類中的資料成員做操作。類的定義是 class 類名 類在定義完需要在大括號後加上 號。如果私有成員放在...

類與物件(1)

類與物件 1 主函式 public class text 這裡定義乙個人的類 class person public void setage int age 建構函式做初始化 public person 當沒有建構函式時,計算機會預設乙個無引數建構函式 當程式設計師寫了乙個有引數的建構函式,系統就不...

類與物件1

開發工具與關鍵技術 vs2015與 c 類 class 是物件導向程式設計設計 oop 實現資訊封裝的基礎 類是使用者自定義型別,也稱類型別 每個類包含資料說明和一組運算元據或傳遞訊息的函式。類的例項稱為物件 結構體型別 結構體型別由數目固定的成員組成 各成員可以具有不同的資料型別 乙個結構變數在記...