類
- 類的使用
- 參考
- 類的定義
- struct和class的區別
- 封裝
- 類的作用域
- 類的實體化
- 計算類物件的大小
類的使用
參考

C++兼容C結構體的語法
C++中的struct已經不僅僅是結構體,struct已經同時升級成類,
類的定義
class className
{
// 類體:由成員函式和成員變陣列成
}; // 一定要注意后面的分號
class為定義類的關鍵字,ClassName為類的名字,{}中為類的主體,注意類定義結束時后面分號,
類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數; 類中的函式稱為類的方法或者成員函式,
struct可以定義類,但在C++中更喜歡用class來代替
C語言面向程序——資料和方法是分離的
C++面向物件——資料和方法是封裝在一起的

struct和class的區別

總結:
- C++實作封裝的方式:用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問權限選擇性的將其介面提供給外部的用戶使用,
- 訪問限定符:public(公有)、protected(保護)、private(私有)
- public修飾的成員在類外可以直接被訪問
- protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
- 訪問權限作用域從該訪問限定符出現的位置開始直到下一個訪問限定符出現時為止
- class的默認訪問權限為private,struct為public(因為struct要兼容C)
上方代碼改正:
class stack
{
public: //公有(可在類外面直接訪問)
void StackInit()
{
}
void StackPush(int x)
{
}
private: //私有(不可在類外面直接訪問)
int* a;
int top;
int capacity;
};
int main()
{
stack st;
st.StackInit();
st.StackPush(1);
return 0;
}
封裝

總結:
- 類的定義和設計就體現了封裝
- 面向物件的三大特性:封裝、繼承、多型(最為出名的)、抽象、反射(Java),
- 封裝:將資料和操作資料的方法進行有機結合,隱藏物件的屬性和實作細節,僅對外公開介面來和物件進行互動,
- 封裝本質是一種管理,
類的作用域

改正:將Queue.cpp檔案
#define _CRT_SECURE_NO_WARNINGS 1
#include"Queue.h"
void Queue::QueueInit()// 這里需要指定QueueInit是屬于Queue這個類域
{
}
void Queue::QueuePush(int x)
{
}
void Queue::QueuePop()
{
}
總結:
- 類中的成員函式在宣告和定義分離時需要使用 :: 作用域決議符指明成員屬于哪個類域,
- 短小的成員函式,直接在類里面定義,直接被看成行內函式inline
- 長的函式,宣告和定義分離
類的實體化

總結:
- 用型別別創建物件的程序,稱為類的實體化
- 類只是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的記憶體空間來存盤它
- 一個類可以實體化出多個物件,實體化出的物件 占用實際的物理空間,存盤類成員變數

類實體化出物件就像現實中使用建筑設計圖建造出房子,類就像是設計圖,只設計出需要什么東西,但是并沒有物體的建筑存在,同樣類也只是一個設計,實體化出的物件才能實際存盤資料,占用物理空間,
計算類物件的大小

知識點:
- 計算型別大小或者是類物件,只考慮成員變數,因為物件中,只存了成員變數,沒有存成員函式
- 對于類物件:只保存成員變數,成員函式存放在公共的代碼段,
- 一個類的大小,實際就是該類中”成員變數”之和,當然也要進行記憶體對齊,
- 注意空類的大小,空類比較特殊,編譯器給了空類一個位元組來唯一標識這個類,
- 如果一個類沒有物件,那么它的物件需要給1byte進行占位,標識物件存在,這1byte不存盤有效資料,

結構體記憶體對齊規則:
https://blog.csdn.net/AI_ELF/article/details/117877990?spm=1001.2014.3001.5501
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/308743.html
標籤:java
