初夏小談 類和物件(一)

2021-09-12 14:25:27 字數 2603 閱讀 3277

所以在c++中把處理問題的步驟進行包裝就形成了類。這個類可以處理特定的問題,而不用去關注它是怎麼一步步處理的。在c++中類用class來標識,struct也可以。類中不僅可以定義變數,還可以定義函式。例如:

struct student

void printstu()

//成員變數

char _name[20];

char _gender[10];

int _age;

};

struct就是定義類的關鍵字,後面緊跟著就是類名student,大括號中就是類的主體。在這個類中定義了兩個成員函式和三個成員變數。

注意:①:在類定義完後要加;

①:類第一種定義方式就是上面的例子那種,將成員函式的宣告和定義全部放在類中

②:就是將類中成員函式的定義和宣告分開。

二者的中像第一種方式,如果把函式宣告和定義全部放到類中,編譯器有可能會把它當做內聯函式來處理。

一、訪問限定符

1.訪問限定符:顧名思義就是該成員變數或成員方法能不能被訪問,在c++中給出:

①:允許訪問符:public

②:無法訪問:private、protected

2.為什麼要加訪問限定符?

在c++中,用類來進行對成員函式和成員變數進行封裝,而它就像人一樣也有一些不想被人訪問的東西,所以就用訪問限定符來修飾。只提供一些可以被訪問的介面來給外部使用。

3.對訪問限定符做一下說明:

①:public修飾的成員函式和成員變數都可以在外面被使用。

②:被private和protected修飾的成員是私有的。在外面不可以被訪問。

③:訪問限定符所管轄的範圍就是從它開始自上而下直到遇到其它的訪問限定符結束

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

4.class和struct的區別?

在c++中也可以用struct來定義類,是因為c++要相容c,在c++中也可以用struct來定義結構體。在定義類時不同的是:struct定義的類,預設訪問許可權是共有的,而class定義的類則是預設私有的。

二、封裝

1.什麼是封裝?

封裝就是把資料和運算元據的方法進行包裝,隱藏其實現的細節,只向外提供相應的介面來和物件進行互動。

封裝的本質是一種管理。

1.類定義了乙個新作用域,類中成員作用域都在類中,想要在類外定義成員,那就需要::作用域來說明在哪個類中。

2.成員變數在類中具有全域性屬性

1.定義乙個類之後,就有了這種類型別,此時它不是乙個不是乙個實體,而是乙個模型。編譯器並沒有為它分配實際的記憶體空間。此時就好比int,char一樣

2.用類型別定義出來的變數就是類的例項化,它被稱為物件(其實也就是變數)。

3.類和用類型別定義出來的物件的關係就好比,建造房子的圖紙和大樓的關係。

1.乙個類的大小,就是其成員變數所佔的記憶體空間的大小,要考慮記憶體對齊。成員函式放在公共的**段。

2.結構體內存對齊規則:

③:結構體的總體大小對齊到成員最大對齊數和預設對齊數取小的整數倍。

④:如果有巢狀結構體,巢狀的結構體先對齊到內部最大的對齊數,之後再對齊到最大的對齊數的整數倍。

1.this指標是什麼?

由於c++將將成員函式和成員變數進行封裝定義在類中。當建立多個物件,為其物件進行處理時。會調相應函式但是,當進入函式內部時,如何區分現在處理的是哪個物件呢?,this指標就是指向當前物件,只是這是由編譯器自動賦予引數。對使用者是透明的。

2.那麼編譯器是識別類分為三步?

①:識別類名

②:識別類中成員變數

③:識別類中的成員函式&並且對類中的成員函式進行修改

3.this指標的特性:

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

②:只能在成員函式內部使用

④:this是成員函式所傳的第乙個指標,一般通過ecx暫存器來傳遞。它是通過_thiscall約定,

不定引數是通過引數壓棧(_cdecl約定)  void testfunc(...) {}

4.this既然是const型別不可在函式裡面改,那麼它一定不可以空嗎?

答案是否定的。**如下:

class student

void printstudentinfo()

//不定引數是通過引數壓棧(_cdecl約定)

void testfunc(...)

{}private:

char _name[20];

char _gender[20];

int _age;

};int main()

5.既然在此引用和指標都能起到相同的作用,而且引用更安全,方便,為什麼不用引用嗎?

因為模擬引用出現的早,引用在c++1.0才出現的。

珍&原始碼

初夏小談 類和物件(二)之建構函式

如果乙個類中什麼成員什麼也沒有,稱它為空類。但是它裡面真的什麼也沒有嗎?在c 中空類中會預設生成6個成員函式。首先來說說第乙個建構函式。一 什麼是建構函式?1.概念 建構函式是一種特殊的成員函式,它與類名相同,在建立類型別物件時,由編譯器自動呼叫初始化物件,為物件賦乙個合適的初始值,並且在物件生命週...

初夏小談 AI雲盤系統

解決由於經常將一些以前的檔案刪除,而現今或者以後可能用到的尷尬境地。ai雲盤系統功能具體可分為兩大塊 分別是客戶端和服務端兩大部分。客戶端與服務端通訊的協議是基於http協議。客戶端 1.首先獲取檔案的備份資訊記錄,目的是看看哪些檔案已經進行了備份,並將這些檔案的大小和修改資訊以鍵值對的形式儲存到u...

初夏小談 複雜鍊錶的複製

在鍊錶的中有這樣一類鍊錶。它至少包含兩個指標。其中乙個指向下乙個結點。有乙個指標隨機的指向鍊錶的其它結點,也可能指向它自己,也可能指向null。對於該類鍊錶的複製來說。最大的難度就是如何處理複製的新鍊錶的這個隨機指標指向的問題。因此在對該類煉表處理時,就必須根據源鍊錶的指標指向來得到新鍊錶的隨機指標...