类和对象——初入江湖
文章目錄
- 1.面向過程和面向對象的區別
- 2.什么是類
- 3.類的定義
- 3.1類的兩種定義方式
- 4.類的訪問限定符及封裝
- 4.1什么是封裝
- 4.2訪問限定符
- 5.類的作用域
- 6.類的實例化
- 7.類大小的計算
- 7.1類的大小不包括函數的大小
- 7.2空類的大小不為零
- 8.this指針
- 8.1什么是this指針
- 8.2this指針的特性
1.面向過程和面向對象的區別
C語言是面向過程的,關注的是實現的過程,分解出解決一個問題的步驟,通過調用函數來逐步解決問題;
C++是面向對象的,關注的是對象,將一件事情拆分成不同的對象,靠對象之間的交互完成;
舉個簡單的例子:
我們點外賣,需要經過接單,配餐,送餐這就是關注過程。老板,外賣員和客戶就是關注對象。
2.什么是類
C語言中,結構體是變量的集合,在C++中結構體中不僅可以定義變量還可以定義函數。
在C++中更喜歡用關鍵字class代替struct。
3.類的定義
計算機語言一般是向前兼容的,C++中依然兼容C語言結構體的用法,并且在此基礎上將struct升級為了類,特點是類中除了可以有變量還可以有函數;
class為定義類的關鍵字,stu為類的名字,{}為類的主體。
類中的元素稱為類的成員:類中的數據稱為類的屬性或者成員變量;
類中的函數稱為類的方法或者成員函數;
3.1類的兩種定義方式
1.聲明和定義全部放在類體之中,需要注意:成員函數如果在類中定義,編譯器可能會將其當成內聯函數處理。
2.聲明放在頭文件中,類的定義放在.cpp文件之中(分離的是成員函數)
兩種定義方式,采用得較多的是第二種
4.類的訪問限定符及封裝
4.1什么是封裝
C++實現封裝的方式:用類將對象的屬性與方法結合在一起,讓對象更加完善,通過訪問權限選擇性的將其接口提供給外部的用戶使用;
1.數據和方法放到了一起,封裝到類中。比如C語言中數據是結構體,方法是函數,是分離的。
2.通過訪問限定符來控制外面能否訪問
封裝的特性:
將數據和操作數據進行有機結合,隱藏對象的屬性和實現細節,僅對外公開接口來和對象進行交互。
封裝本質上是一種管理:比如在博物館內,如果什么都不管,文物很容易就被破壞了,那么我們需要建房子將文物封裝起來。但是封裝的目的不是不讓人看,因此開放售票通道,可以購票突破封裝在合理的監管機制下參觀。
類也是一樣的,我們將類的數據和方法都封裝在一起,不想讓人看到的用限定符private/protected將成員封裝起來。開放一些共有的成員函數對成員合理的訪問。所以封裝本質上是一種管理。
4.2訪問限定符
5.類的作用域
類定義了一個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用::作用域解析符,指定成員屬于哪個類域
6.類的實例化
1.類只是一個模型一樣的東西,限定了類有哪些成員,定義出來一個類并沒有分配實際的內存空間來存儲它;
2.一個類可以實例化出多個對象,實例化出來的對象占用實際的物理空間,存儲類成員變量;
3.比如,一個產品的設計圖就是類,設計圖中說明了需要什么東西,但是沒有實際的產品,設計圖是不同當作產品用于生活的,只是一種設計。同樣類也是一種設計,是不進行數據的存儲的。
類實例化出來的對象就是按設計圖要求做出來的產品。實例化出來的對象才能存儲數據,占用物理空間;
7.類大小的計算
類本質上也是結構體,計算大小時也要進行內存對齊,但是類和結構體的區別是,類中還包含成員函數,那么成員函數的大小怎么計算呢?
理論上來講,我們的類中存儲變量和函數指針,因此計算大小時,在內存對齊的基礎上,計算出成員變量和成員函數的大小,那么實際情況呢?請看下圖
7.1類的大小不包括函數的大小
7.2空類的大小不為零
8.this指針
8.1什么是this指針
8.2this指針的特性
1.this指針的類型:類類型* const
2.只能在成員函數的內部使用
3.this指針本質上其實是一個成員函數的形參,是對象調用成員函數時,將對象地址作為實參傳遞給this形參。所以對象中不存儲this指針
4.this指針是成員函數第一個隱含的指針形參,一般情況低下由編譯器通過ecx寄存器自動傳遞,不需要用戶傳遞;
問題集:
1.this指針存在哪里?
2.this指針可以為空嗎
在某些場景可以為空
總結
以上是生活随笔為你收集整理的类和对象——初入江湖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Prometheus源码学习(4) 通过
- 下一篇: 高并发系列——CAS操作及CPU底层操作