C 中的類與物件1

2021-10-19 07:06:25 字數 3311 閱讀 5405

2.6 類的物件大小的計算

2.7 類成員函式的this指標

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

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

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

struct student

void

printstudentinfo()

char _name[20]

;char _gender[3]

;int _age;};

intmain()

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

class

classname

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

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

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

類的兩種定義格式

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

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

一般情況下,更期望採用第二種方式。

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

指明成員屬於哪個類域。

class

person

;// 這裡需要指定printpersoninfo是屬於person這個類域

void person::

printpersoninfo()

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

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

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

3 舉個例子。類例項化出物件就像現實中使用建築設計圖建造出房子,類就像是設計圖,只設計出需要什

麼東西,但是並沒有實體的建築存在,同樣類也只是乙個設計,例項化出的物件才能實際儲存資料,佔

用物理空間

c++實現封裝的方式:用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問許可權選擇性的將其

介面提供給外部的使用者使用。

訪問限定符

訪問限定符的說明

c++中struct和class的區別是什麼?

c++需要相容c語言,所以c++中struct可以當成結構體去使用。另外c++中struct還可以用來定義類。

和class是定義類是一樣的,區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式

是private。

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

在類和物件階段,我們只研究類的封裝特性,那什麼是封裝呢?

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

互動。封裝本質上是一種管理:我們如何管理兵馬俑呢?比如如果什麼都不管,兵馬俑就被隨意破壞了。那麼我們

首先建了一座房子把兵馬俑給封裝起來。但是我們目的全封裝起來,不讓別人看。所以我們開放了售票通

道,可以買票突破封裝在合理的監管機制下進去參觀。類也是一樣,我們使用類資料和方法都封裝到一下。

不想給別人看到的,我們使用protected/private把成員封裝起來。開放一些共有的成員函式對成員合理的訪

問。所以封裝本質是一種管理。

只儲存成員變數,成員函式存放在公共的**段

乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬

較特殊,編譯器給了空類乙個位元組來唯一標識這個類。

結構體的記憶體對齊規則參考:

我們先來定義乙個日期類date

class

date

void

setdate

(int year ,

int month ,

int day)

private

:int _year ;

// 年

int _month ;

// 月

int _day ;

// 日};

intmain()

對於上述類,有這樣的乙個問題:

date類中有setdate與display兩個成員函式,函式體中沒有關於不同物件的區分,那當s1呼叫setdate函式

時,該函式是如何知道應該設定s1物件,而不是設定s2物件呢?

c++中通過引入this指標解決該問題,即:c++編譯器給每個「非靜態的成員函式「增加了乙個隱藏的指標參

數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該

指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。

1 this指標的型別:類型別* const

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

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

形參。所以物件中不儲存this指標。

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

傳遞

C 類與物件1

我們都知道c語言是一門面向過程語言,而c 是一門物件導向的語言,那麼何為面向過程 物件導向呢?面向過程就是關注的是過程,分析求解問題的步驟,通過呼叫函式逐步解決問題,而物件導向關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。在c語言中我們用關鍵字struct來定義結構體,結構體只能定...

C 中的類與物件

什麼是類與物件?類是一種抽象化的資料型別,一般而言,它包括資料與處理資料的函式這兩大部分。而物件則是對某一類的例項。例如 class cmyclass cmyclass為類 cmyclass myclass myclass為物件1.類的定義與特點 類的定義示例如下 class cmyclass 各個...

c 中的類與物件

我們都知道,在c語言中,結構體是指一系列相同型別或者不同型別的資料構成的資料集合。在c語言中我們將結構體定義為 struct student 而我們知道,在c語言中,資料 和 處理資料的操作 函式 是分開的,語言本身並沒有支援 資料和函式 之間的關聯性。所以在c語言的結構體中,只能存放資料,定義變數...