類是物件的抽象,而物件是類的具體例項。類是抽象的,不占用記憶體;而物件是具體的,占用記憶體空間。
c語言是面向過程的,關注的是過程中的資料與方法。
c++是物件導向的,關注的是物件的屬性與功能。
1.類的簡單定義
class為定義類的關鍵字,date為類的名字,{}中為類的主體,注意類定義結束時後面分號。
類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數; 類中的函式稱為類的方法或者成員函式。
2.類的兩種定義方式
(1) 宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處
理。
(2) 宣告放在.**件中,類的定義放在.cpp檔案中
類的宣告
類的定義
一般情況下,採用第二種
1.訪問限定符:public(公有), protected(保護), private(私有)
c++實現封裝的方式:用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問許可權選擇性的將其
介面提供給外部的使用者使用。
訪問限定符說明:
(1) public修飾的成員在類外可以直接被訪問
(2)protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
(3)訪問許可權作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止
(4)class的預設訪問許可權為private,struct為public(因為struct要相容c)
注意:訪問限定符只在編譯時有用,當資料對映到記憶體後,沒有任何訪問限定符上的區別
補充:(1)如何在類外訪問乙個類中的私有成員變數
類中定義函式,類外呼叫函式;指標
(2)c++中struct和class的區別是什麼?
解答:c++需要相容c語言,所以c++中struct可以當成結構體去使用。另外c++中struct還可以用來定義類。
和class是定義類是一樣的,區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式
是private。
2.封裝
封裝:將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行
互動。封裝就好比我們在去動物園時,園方會將各種動物用圍欄圍起來(即將物件的的屬性隱藏起來),然後讓遊客通過購票入園參觀,僅限於在圍欄外**(即對外公開介面和物件進行互動)
補充:物件導向的三大特性:封裝、繼承、多型。
類定義了乙個新的作用域,類的所有成員都在類的作用域中。
在類體外定義成員,需要使用 :: 作用域解析符指明成員屬於哪個類域。
在類的作用域外,只能夠通過物件(或指標)借助成員訪問操作符和.來->訪問類成員
用類型別建立物件的過程,稱為類的例項化
1. 類只是乙個模型一樣的東西,限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它
2. 乙個類可以例項化出多個物件,例項化出的物件 占用實際的物理空間,儲存類成員變數
3. 做個比方。類例項化出物件就像現實中使用建築設計圖建造出房子,類就像是設計圖,只設計出需要什
麼東西,但是並沒有實體的建築存在,同樣類也只是乙個設計,例項化出的物件才能實際儲存資料,佔
用物理空間
例項化後
1.計算類物件的大小
// 類中既有成員變數,又有成員函式
class a1
private:
int _a;
};// 類中僅有成員函式
class a2
};// 類中什麼都沒有---空類
class a3
{};int main()
sizeof(a1)=4 ; sizeof(a2)=1 ; sizeof(a3)=1;
結論:乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬
較特殊,編譯器給了空類乙個位元組來唯一標識這個類。
結構體內存對齊規則
(1) 第乙個成員在與結構體偏移量為0的位址處。
(2)其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。
vs中預設的對齊數為8,gcc中的對齊數為4
(3)結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
(4)如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是
所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
(1)this指標的型別:類型別* const
(2)只能在「成員函式」的內部使用
(3)this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this
形參。所以物件中不儲存this指標。
(4)this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者
傳遞
補充:this指標存在棧上
類和物件(上)
類的定義格式 說明部分和實現部分 class 類名 public 公有資料成員和成員函式 protected 保護資料成員和成員函式 private 私有資料成員和成員函式 各個成員函式的實現 建構函式 a 作用 為物件分配空間 對物件初始化 即賦初始值 請求其他資源。b 特點 函式名和類名完全相同...
類和物件(上)
1.什麼是物件導向?想想之前學過的c語言,c語言是面向過程的語言,不管是簡單型別還是複雜型別,只是一味的呼叫函式,這裡的呼叫函式就是將資料處理的過程,更加在乎的是處理邏輯和處理結果 c 是面向過程的語言,首先要說一下什麼是類?什麼是物件?類,通俗的就講就是乙個事物的描述,描述著這一類事物的特徵和動作...
類和物件(上)
1.類是物件的抽象,而物件是類的具體例項。類是抽象的,不占用記憶體 而物件是具體的,占用儲存空間。2.面向過程與物件導向 c語言是面向過程的,關注的是過程中的資料與方法。c 是物件導向的,關注的是物件 的屬性與功能。1.在c 中,結構體內不僅可以定義變數,也可以定義函式。struct student...