C 類與物件(一)

2021-09-27 03:03:08 字數 2999 閱讀 5153

c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題

c++是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成

c語言中,結構體只能定義變數,c++中,結構體內不僅可以定義變數,也可以定義函式

#includeusing namespace std;

struct person

void printpersoninfo()

char _name[20];

char _gender[3];

int _age;

};int main()

形如上述結構體的定義,在c++中更喜歡用class來代替

class classname

; //一定要注意後面的分號

class為定義類的關鍵字,classname為類的名字,{}中為類的主體,注意類定義結束時後面的分號。

類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數;類中的函式稱為類的方法或者成員函式。

類的兩種定義方式:

1、宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處理

2、宣告放在.**件中,類的定義放在.cpp檔案中

一般情況下,更期望採取第二種

c++實現封裝的方式:用類將物件的屬性和方法結合在一塊,讓物件更加完善,通過訪問許可權選擇性的將其介面提供給外部的使用者使用

三種訪問限定符:public(公有)protected(保護)private(私有)

訪問限定符說明

1、public修飾的成員在類外可以直接被訪問

2、protected和private修飾的成員不能直接被訪問(此處protected和private是類似的)

3、訪問許可權作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止

4、class的預設訪問許可權是private,struct為public(因為struct要相容c)

注意:訪問限定符只有在編譯時有用,當資料對映到記憶體後,沒有任何訪問限定符上的區別

物件導向的三大特性:封裝繼承多型

封裝:將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行互動

封裝本質上是一種管理,我們通常使用protected/private把成員封裝起來,開放一些共有的成員函式對成員合理的訪問

封裝的好處:

1、可以徹底隱藏方法的內部實現,僅僅提供乙個呼叫的方法給其他人,讓其他使用這個類的人不需要關心是如何實現的,只要知道該如何呼叫就行

2、隱藏方法的內部實現的好處,可以讓保留呼叫方法不變的同時,隨意修改類的結構,而不影響其他人執行結果

3、封裝還會分開類的屬性,將類的屬性分成私有屬性和公共屬性。私有屬性僅供類自身呼叫,和公共屬性也僅提供乙個供外部呼叫的方法

4、按照軟體的術語,良好的封裝是能夠減少耦合

類定義了乙個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用 :: 作用域解析符指明成員屬於哪個類域

用類型別建立物件的過程,稱為類的例項化

1、類只是乙個模型一樣的東西,限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它

2、乙個類可以例項化出多個物件,例項化出的物件,占用實際的物理空間,儲存類成員變數

先看如下**:

#includeusing namespace std;

//類中既有成員函式,又有成員變數

class a1

;public:

int _a;

};//類中只有成員函式

class a2;};

//空類

class a3

{};int main()

執行程式後得出的結果為: 4,1,1

結合資料可以得出:乙個類的大小,實際就是該類中「成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬較特殊,編譯器給了空類乙個位元組來唯一標識這個類

對非空類而言,類物件的大小,與成員函式無關,等同於計算結構體的大小

結構體內存對齊

1、第乙個成員在與結構體偏移量為0的位址處

2、其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處

注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值

vs中預設對齊數為8,gcc中對齊數為4

3、結構體總大小為:最大對齊數(所有變數型別最大值與預設對齊數取最小)的整數倍

4、如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍

c++編譯器給每個「成員函式」增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式物件),在函式體中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者來說是透明的,即使用者不需要傳遞引數,編譯器自動完成

特性1、this指標的型別:類型別 *const

2、只能在「成員函式」的內部使用

3、this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標

4、this指標是成員函式第乙個隱含的指標形參,一般情況下由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞

C 類與物件 一

class date private int day int month 檔案 class date 檔案 include date.h void date showinfo class person private char name int age void test class a priva...

C 類與物件(一)

目錄 一.類的定義 二.成員函式 三.物件 四.類中成員的訪問方式 物件導向程式設計技術模仿人類描述事物的邏輯思維來構建程式。c 中,屬性用資料的儲存結構實現,稱為類的資料成員 方法用函式實現,稱為成員函式。class 類名 是定義類的關鍵字,類名是使用者自定義的識別符號 公有段資料成員和成員函式 ...

C 類與物件

程式設計模型 所有計算機均由兩種元素組成 和資料.精確的說,有些程式是圍繞著 什麼正在發生 而編寫,有些則是圍繞 誰正在受影響 而編寫的.抽象封裝 封裝是一種把 和 所操作的資料 在一起,使這兩者不受外界干擾和誤用的機制.繼承 繼承是指乙個物件從另乙個物件中獲得屬性的過程.是物件導向程式設計的三大原...