C 學習筆記序列之物件和類

2021-05-27 06:36:06 字數 1679 閱讀 2360

下面對c++的物件和類這一章做乙個總結

1.什麼是類?我們理解類,可以直接把它理解為乙個工具,就是使用者用來實現抽象轉換為自定義型別的工具。

2.類實現抽象,封裝,資料隱藏

抽象,乙個類就是很多具有相同屬性和方法的抽象;類實現封裝表現在類的設計時把類的公有介面和實現細節分開;資料隱藏表現在實現的細節隱藏在似有部分中,當然,你也可以通過作用域讓實現的細節不能改動資料成員,這樣可以讓使用者不需要了解資料是如何表示的,只需要呼叫相關的介面既可以。

3.類和結構的區別:相信在很多地方可以看到這些討論,到目前為止,我知道的區別是一句話:類的資料成員和函式預設是private,而結構式public,其他一樣。

4.關於類的例項的記憶體分配解析

我們知道,定義了乙個類,如果我們要定義乙個累的例項,很簡單:

class stock

private:

int a;

public:

void show();

int mian()

stock stk;

上面這個很簡單,相信大家都會,那麼乙個類的例項在記憶體中是怎麼分配的呢?

首先,我們知道,定義乙個類例項,在記憶體中會為每個例項分配乙個位址聯絡的空間,但是我們知道stock stk;只是建立了類的資料成員大小空間的記憶體,而成員函式卻沒有為每個例項複製乙個副本,而是所有的類例項共用類的成員函式。

舉個例子:定義兩個類的例項

stock stk1; stock stk2;

則記憶體分配給stk1; stk2每個例項乙個單獨的資料成員空間,但是stk1.show()和stk2.show()呼叫的是同乙個位址的函式,只不過他們修改的資料成員不一樣。

5.類的兩個特殊的函式:建構函式和虛構函式

我們知道,定義乙個變數,很簡單,int a,其實這裡面做了一些我們不知道的工作,int其實是乙個類,其實這裡就是定義了乙個int類的例項;我們也很清楚的知道,a在記憶體中佔四個位元組,但是怎麼分配的呢?

這裡我們談到建構函式,就很好理解啦,其實這是系統做的事情,宣告乙個變數,會呼叫該類的建構函式為變數分配空間,具體是怎麼分配,int類裡面的資料成員是什麼東東,我就沒有深究啦。。。。。。。。

講了建構函式,現在來講講虛構函式:

虛構函式是跟建構函式相對立的,建構函式用來分配空間,那麼虛構函式就是用來**空間的,但是虛構函式不過載,沒有分有引數和無引數的虛構函式,而且乙個類只能有乙個虛構函式,它的名字是:~類名()

虛構函式**空間就是**建構函式為例項分配的資料成員和成員函式所占用的空間,而且虛構函式一般是由編譯器來做的,不需要使用者手動呼叫類的虛構函式。

6.const成員函式

有一種情況,既然c++支援資料封裝,那麼很可能在呼叫成員函式的時候不經意間修改的資料,既然這樣那麼有什麼辦法可以防止修改呢?這個時候,const成員函式就派上了用場啦,以下是const成員函式的定義:

class stock

private:

int a;

public:

void show() const;//在函式的後面加上乙個const就表示這個函式是const成員函式,不能對類的資料成員a進行修改。

void stock::show()

a=9;

int mian()

stock stk;

如果你嘗試定義乙個stock stk;然後呼叫stk.show();編譯器就會報錯,因為你嘗試修改了資料成員a的值。

C 學習筆記 類和物件(1)

實體 客觀世界存在的某種事物,一杯茶,乙個人。每個實體都有屬性,其中,特徵稱為靜態屬性,功能稱為動態屬性。比如人的特徵,人的功能 物件 對實體進行抽象得到了物件。類 class 具有相同特徵與功能的物件集合。物件是類的例項化 instance 如果出現以下幾種情況,程式就會執行析構函式 如果在乙個函...

C 學習筆記 類和物件 三

靜態的資料成員在記憶體中只佔乙份空間。每個物件都可以引用這個靜態資料成員。靜態資料成員的值對所有物件都是一樣的。如果改變它的值,則在各物件中這個資料成員的值都同時改變了。這樣可以節約空間,提高效率。關於靜態資料成員的幾點說明 1 如果只宣告了類而未定義物件,則類的一般資料成員是不佔記憶體空間的,只有...

C 學習筆記 類和物件(下篇)

include using namespace std 初始化列表 class b private int a 4 char b 1 class a class d private int g void display private int year 4 int month 4 int day 4...