4.類的訪問限定符及封裝
5.類的作用域
6.類的例項化
7.類大小的計算
8.this指標
c語言是面向過程的,關注的是實現的過程,分解出解決乙個問題的步驟,通過呼叫函式來逐步解決問題;
c++是物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成;
舉個簡單的例子:
我們點外賣,需要經過接單,配餐,送餐這就是關注過程。老闆,外賣員和客戶就是關注物件。
c語言中,結構體是變數的集合,在c++中結構體中不僅可以定義變數還可以定義函式。
在c++中更喜歡用關鍵字class代替struct。
計算機語言一般是向前相容的,c++中依然相容c語言結構體的用法,並且在此基礎上將struct公升級為了類,特點是類中除了可以有變數還可以有函式;
class為定義類的關鍵字,stu為類的名字,{}為類的主體。
類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數;
類中的函式稱為類的方法或者成員函式;
1.宣告和定義全部放在類體之中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處理。
2.宣告放在標頭檔案中,類的定義放在.cpp檔案之中(分離的是成員函式)
兩種定義方式,採用得較多的是第二種
c++實現封裝的方式:用類將物件的屬性與方法結合在一起,讓物件更加完善,通過訪問許可權選擇性的將其介面提供給外部的使用者使用;
1.資料和方法放到了一起,封裝到類中。比如c語言中資料是結構體,方法是函式,是分離的。
2.通過訪問限定符來控制外面能否訪問
封裝的特性:
將資料和運算元據進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行互動。
封裝本質上是一種管理:比如在博物館內,如果什麼都不管,文物很容易就被破壞了,那麼我們需要建房子將文物封裝起來。但是封裝的目的不是不讓人看,因此開放售票通道,可以購票突破封裝在合理的監管機制下參觀。
類也是一樣的,我們將類的資料和方法都封裝在一起,不想讓人看到的用限定符private/protected將成員封裝起來。開放一些共有的成員函式對成員合理的訪問。所以封裝本質上是一種管理。
類定義了乙個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用::作用域解析符,指定成員屬於哪個類域
1.類只是乙個模型一樣的東西,限定了類有哪些成員,定義出來乙個類並沒有分配實際的記憶體空間來儲存它;
2.乙個類可以例項化出多個物件,例項化出來的物件占用實際的物理空間,儲存類成員變數;
3.比如,乙個產品的設計圖就是類,設計圖中說明了需要什麼東西,但是沒有實際的產品,設計圖是不同當作產品用於生活的,只是一種設計。同樣類也是一種設計,是不進行資料的儲存的。
類例項化出來的物件就是按設計圖要求做出來的產品。例項化出來的物件才能儲存資料,占用物理空間;
類本質上也是結構體,計算大小時也要進行記憶體對齊,但是類和結構體的區別是,類中還包含成員函式,那麼成員函式的大小怎麼計算呢?
理論上來講,我們的類中儲存變數和函式指標,因此計算大小時,在記憶體對齊的基礎上,計算出成員變數和成員函式的大小,那麼實際情況呢?請看下圖
1.this指標的型別:類型別* const
2.只能在成員函式的內部使用
3.this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標
4.this指標是成員函式第乙個隱含的指標形參,一般情況低下由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞;
問題集:
1.this指標存在**?
2.this指標可以為空嗎
在某些場景可以為空
GitHub 初入江湖
常見問題 github註冊 登陸 建立自己的repositories 複製專案的位址,備用 clone or download 單擊之後顯示 位址 開啟本地專案工程檔案 右擊,先擇git bash here 輸入 git clone git clone cloning into yijiazheng...
初入江湖 一
程式設計師的 就如同武林人士的武功一樣,那麼我們在開始修習 前先展示一段。初入江湖的少俠們請先以觀賞為主,後續我們慢慢到來!include 引用 easyx 圖形庫 include include mci 庫標頭檔案 pragma comment lib,winmm.lib intmain void...
初入江湖(二)
字串常量 include c 標準輸入輸出標頭檔案 include c語言標準輸入輸出標頭檔案 include 呼叫system 的標頭檔案 命名空間的使用 諸位應該看到上面 中c 輸出的 中總有std 的出現。那麼std 是什麼呢?專用術語管他叫命名空間。include include std s...