?向對象三?特性:封裝、繼承、多態
類和對象
- 一.類的定義
- 1. 類的定義格式
- 2.類域
- 二.實例化
- 1.對象
- 2.對象的大小
- 三.this指針

在 C++ 的世界里,類和對象構成了面向對象編程(Object-Oriented Programming,OOP)的核心框架,如同搭建高樓大廈的基石,支撐起復雜且靈活的程序結構。無論是開發游戲、設計大型軟件系統,還是進行底層驅動開發,類和對象的合理運用都能讓代碼更具邏輯性、可維護性和擴展性。
一.類的定義
類是一種用戶自定義的數據類型,它將數據(成員變量)和操作這些數據的函數(成員函數)封裝在一起,就像一張設計藍圖,定義了某一類事物的屬性和行為。
1. 類的定義格式
C++?種實現封裝的?式,?類將對象的屬性與?法結合在?塊,讓對象更加完善,通過訪問權限選擇性的將其接提供給外部的??使?。
class為定義類的關鍵字,Stack為類的名字,{}中為類的主體,注意類定義結束時后?分號不能省略。類體中內容稱為類的成員:類中的變量稱為類的屬性或成員變量;類中的函數稱為類的?法或者成員函數。
class 類名 {private:// 私有成員變量和函數,只能在類內部訪問數據類型 成員變量名;返回類型 私有成員函數(參數列表);public:// 公有成員變量和函數,可以在類外部訪問數據類型 成員變量名;返回類型 公有成員函數(參數列表);protected:// 保護成員變量和函數,可在類及其派生類中訪問數據類型 成員變量名;返回類型 保護成員函數(參數列表);
};
private、public和protected是訪問控制修飾符,用于限定成員的訪問權限。
-
public修飾的成員在類外可以直接被訪問;protected和private修飾的成員在類外不能直接被訪問,protected和private是?樣的,以后繼承章節才能體現出他們的區別。
-
訪問權限作?域從該訪問限定符出現的位置開始直到下?個訪問限定符出現時為?,如果后?沒有訪問限定符,作?域就到}即類結束。
-
class定義成員沒有被訪問限定符修飾時默認為private,struct默認為public。
-
?般成員變量都會被限制為private/protected,需要給別?使?的成員函數會放為public。
在類里定義的函數默認為inline格式,若在類外定義時,也可以通過認為加inline來實現內聯
2.類域
類域,簡單來說就是類所定義的范圍,類中的成員變量和成員函數都處于這個特定的范圍之內。在類域中定義的名字(成員變量名、成員函數名等),其作用范圍僅限于該類,與類外部的同名標識符相互獨立。
比如,在一個Student類中定義了name成員變量,而在類外部的其他地方也定義了name變量,這兩個name分別屬于不同的作用域,不會產生沖突。
在訪問類域中的成員時,需要遵循一定的規則。如果在類的成員函數內部訪問類的成員變量,無需特殊的前綴,直接使用變量名即可,因為成員函數本身就處于類域之中,編譯器能夠明確識別這是類內的成員。例如:
class Student {
private:string name;int age;
public:void setInfo(string n, int a) {name = n; // 直接訪問類域內的成員變量nameage = a;}
};
但在類外部訪問類的成員時,就需要通過對象或對象指針,并結合點運算符.或箭頭運算符->來明確指定訪問類域中的成員。像這樣:
int main() {Student stu;stu.setInfo("Tom", 20);return 0;
}
類域的存在,一方面實現了數據和操作的封裝,將相關的成員變量和函數聚集在一起,增強了代碼的內聚性;另一方面,通過限制成員的作用范圍,避免了命名沖突,提高了代碼的可讀性和可維護性。同時,在繼承關系中,類域的規則也會影響派生類對基類成員的訪問和覆蓋,這進一步體現了類域在構建復雜類體系時的重要作用。
二.實例化
1.對象
對象是類的具體實例,就像依據設計藍圖建造出的實際建筑。每個對象都有自己獨立的存儲空間,存儲著類中定義的成員變量的值,并且可以調用類中定義的成員函數。
-
?類類型在物理內存中創建對象的過程,稱為類實例化出對象。
-
類是對象進??種抽象描述,是?個模型?樣的東西,限定了類有哪些成員變量,這些成員變量只是聲明,沒有分配空間,?類實例化出對象時,才會分配空間。
-
?個類可以實例化出多個對象,實例化出的對象占?實際的物理空間,存儲類成員變量。
2.對象的大小
在計算對象的大小時,內存分配規則基本與C語言結構體一致。
具體可以看此篇博客 : 結構體內存。
但類的內存分配有幾個特例:
- 類函數所占的內存,是不計算在類的內存大小當中的。由于每次調用類函數時,所調用的是同一個函數,因此沒有比要在每次實例化的過程中為函數分配一塊內存,而是分配在了棧區。
- 當類為空時,為表示類的存在,所以會默認給1字節大小的空間。
三.this指針
在 C++ 類的成員函數中,this指針是一個隱含的指針變量,它指向調用該成員函數的對象。this指針在類和對象的交互中起著至關重要的作用,幫助成員函數準確地訪問和操作所屬對象的成員變量。
編譯器編譯后,類的成員函數默認都會在形參第?個位置,增加?個當前類類型的指針,叫做this指針。
- this 指針的作用?
當多個對象調用同一個成員函數時,this指針使得函數能夠區分到底是哪個對象在調用它。 - this 指針的使用場景
除了在成員函數中訪問成員變量,this指針還常用于函數返回對象自身、解決參數與成員變量同名問題等場景。 - 類的成員函數中訪問成員變量,本質都是通過this指針訪問的。只不過在這里可以隱式使用,編譯器會自動處理。
this指針不能夠出現在形參與實參的位置,但是可以在函數體內顯?使?this指針。他只能夠在類里使用