一、類與物件
c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。
c++ 是物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。
c語言中,結構體中只能定義變數,在c++中,結構體內不僅可以定義變數,也可以定義函式。
二、類的定義
1.定義乙個簡單的類
class date
; //分號不能丟
class是關鍵字,date是類名,{}中是類的主體。類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數;類中的函式稱為類的方法或者成員函式。
2.類的兩種定義方式
(1)宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處理。
class date
private:
int _year; // 年
int _month; // 月
int _day; // 日
};
(2)宣告放在.**件中,類的定義放在.cpp檔案中
//宣告放在date.**件中
class date
;
//類的定義放在date.cpp檔案中
#include "date.h"
void date::display() //類外定義成員函式,需要使用::(作用域解析符)指明其屬於哪個類
三、類的訪問限定符c++中,用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問許可權選擇性的將其介面提供給外部的使用者使用。
public:公有的,修飾的成員在類外可以直接被訪問
protected/private:私有的,修飾的成員在類外不能直接被訪問
訪問許可權作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止
class的預設訪問許可權為private,struct為public(因為struct要相容c)
訪問限定符只在編譯時有用,當資料對映到記憶體後,沒有任何訪問限定符上的區別
c++ 中struct和class的區別是什麼?
解答:c++ 需要相容c語言,所以c++ 中struct可以當成結構體去使用,還可以用來定義類,和class是定義類是一樣的。區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式是private。
四、封裝
物件導向的三大特性:封裝、繼承、多型。在類和物件階段,我們只研究類的封裝特性,那什麼是封裝呢?
封裝:將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行互動。封裝本質上是一種管理:使用類將資料和方法都封裝起來。不想給別人看到的,使用protected/private把成員封裝起來。開放一些公有的成員函式對成員進行合理的訪問。所以封裝本質是一種管理。
五、類的例項化
用類建立物件的過程,稱為類的例項化
class date
;int main()
1.類只限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它。
2. 乙個類可以例項化出多個物件,例項化出的物件占用實際的物理空間,儲存類成員變數。
3.類就像是設計圖,只設計出需要什麼東西,但是並沒有實體的建築存在,類例項化出物件就像現實中使用建築設計圖建造出房子。
六、類的大小
類的成員函式放在公共**區,所有該類的物件共享這些成員函式,每個物件的大小為類內成員變數的大小之和,遵循記憶體對齊原則。
結構體內存對齊規則
第乙個成員在與結構體偏移量為0的位址處。
其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。
vs中預設的對齊數為8,gcc中的對齊數為4
結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是
所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
七、this指標
1.this指標的引出
class date
void setdate(int year, int month, int day)
private:
int _year; // 年
int _month; // 月
int _day; // 日
};int main()
對於上述類,有這樣的乙個問題:
date類中有setdate與display兩個成員函式,函式體中沒有關於不同物件的區分,那當d1呼叫setdate函式時,該函式是如何知道應該設定d1物件,而不是設定d2物件呢?
c++ 中通過引入this指標解決該問題,即:c++ 編譯器給每個「成員函式「增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。
2.this指標的特性
(1) this指標的型別:類型別* const。
(2)只能在「成員函式」的內部使用。
(3)this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標。
(4)this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞。
C 類和物件(上)
目錄類 類的引入 類的定義 類的訪問限定符及封裝 訪問限定符 封裝 類的作用域 類的例項化 類物件大小計算 儲存方式猜測 類物件大小計算規則 結構體內存對齊 this指標 引出 this指標特性 c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。c 是基於物件導向的,...
C 類和物件(上)
1.物件導向的初步認知。c語言是面向過程的,關注的是過程,分析求解問題的步驟,是通過函式呼叫逐步解決問題。c 是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。2.c 中類的定義 c語言中,結構體中只能定義變數,在c 中,結構體中不僅可以定義變數,還可以定義函式。st...
類和物件(上)
類的定義格式 說明部分和實現部分 class 類名 public 公有資料成員和成員函式 protected 保護資料成員和成員函式 private 私有資料成員和成員函式 各個成員函式的實現 建構函式 a 作用 為物件分配空間 對物件初始化 即賦初始值 請求其他資源。b 特點 函式名和類名完全相同...