一、封裝
封裝的意義:
將屬性和行為作為乙個整體,表現生活中的事物,將屬性和行為加以許可權控制
1、在設計類的時候,屬性和行為寫在一起,表現事物。
2、語法: class 類名;
3、類在設計時,可以把屬性和行為放在不同的許可權下,加以控制
訪問許可權有三種:
public 公共許可權
protected 保護許可權
private 私有許可權
4、成員屬性設定為私有
優點1:將所有成員屬性設定為私有,可以自己控制讀寫許可權
優點2:對於寫許可權,我們可以檢測資料的有效性
struct和class區別
在c++中 struct和class唯一的區別就在於 預設的訪問許可權不同
區別:struct 預設許可權為公共
class 預設許可權為私有
二、建構函式和析構函式
物件的初始化和清理也是兩個非常重要的安全問題
乙個物件或者變數沒有初始狀態,對其使用後果是未知
同樣的使用完乙個物件或變數,沒有及時清理,也會造成一定的安全問題。
c++利用了建構函式和析構函式解決上述問題,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。
物件的初始化和清理工作是編譯器強制要我們做的事情,因此如果我們不提供構造和析構,編譯器會提供。
編譯器提供的建構函式和析構函式是空實現。
建構函式:主要作用在於建立物件時為物件的成員屬性賦值,建構函式由編譯器自動呼叫,無須手動呼叫。
析構函式:主要作用在於物件銷毀前系統自動呼叫,執行一些清理工作。
(1)建構函式語法: 類名(){}
建構函式,沒有返回值也不寫void
函式名稱與類名相同
建構函式可以有引數,因此可以發生過載
程式在呼叫物件時候會自動呼叫構造,無須手動呼叫,而且只會呼叫一次
(2)析構函式語法: ~類名(){}
析構函式,沒有返回值也不寫void
函式名稱與類名相同,在名稱前加上符號 ~
析構函式不可以有引數,因此不可以發生過載
程式在物件銷毀前會自動呼叫析構,無須手動呼叫,而且只會呼叫一次
(3)建構函式的分類及呼叫
兩種分類方式:
按引數分為: 有參構造和無參構造
按型別分為: 普通構造和拷貝構造
三種呼叫方式:
1.括號法
2.顯示法
3.隱式轉換法
(4)拷貝構造函式呼叫時機
c++中拷貝構造函式呼叫時機通常有三種情況:
使用乙個已經建立完畢的物件來初始化乙個新物件,
值傳遞的方式給函式引數傳值,
以值方式返回區域性物件;
(5)構造函式呼叫規則
預設情況下,c++編譯器至少給乙個類新增3個函式
1.預設建構函式(無參,函式體為空)
2.預設析構函式(無參,函式體為空)
3.預設拷貝建構函式,對屬性進行值拷貝
構造函式呼叫規則如下:
如果使用者定義有參建構函式,c++不在提供預設無參構造,但是會提供預設拷貝構造
如果使用者定義拷貝建構函式,c++不會再提供其他建構函式
(6)深拷貝與淺拷貝
淺拷貝:簡單的賦值拷貝操作
深拷貝:在堆區重新申請空間,進行拷貝操作
總結:如果屬性有在堆區開闢的,一定要自己提供拷貝建構函式,防止淺拷貝帶來的問題
(7)初始化列表
c++提供了初始化列表語法,用來初始化屬性
語法: 建構函式():屬性1(值1),屬性2(值2)… {}
(8) 類物件作為類成員
c++類中的成員可以是另乙個類的物件,我們稱該成員為 物件成員
(9)靜態成員
靜態成員就是在成員變數和成員函式前加上關鍵字static,稱為靜態成員
靜態成員分為:
1.靜態成員變數
2.所有物件共享同乙份資料
3.在編譯階段分配記憶體
4.類內宣告,類外初始化
靜態成員函式
1.所有物件共享同乙個函式
2.靜態成員函式只能訪問靜態成員變數
物件導向知識點總結
1 物件導向的特徵 物件導向的三個基本特徵是 封裝 繼承 多型。封裝 也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需...
物件導向相關知識點
在了解物件導向程式設計之前首先要先了解程式設計中兩大思想 面向過程 物件導向 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候再乙個乙個的依次呼叫就可以了。舉個栗子 將大象裝進冰箱,面向過程做法 開啟冰箱門 大象裝進去 關上冰箱門 面向過程,就是按照我們分析好了的...
C 物件導向知識點十二 多型
物件導向的三大特性 封裝性是基礎,繼承性是關鍵,而多型性是補充。多型是建立在虛函式的基礎之上的。靜態多型 函式過載,運算子過載,函式模板和類模板 動態多型 也稱為執行時多型,即在程式執行時刻才能決定的東西。靜態聯編 聯編出現在編譯連線階段,又稱為早期聯編,以實現靜態多型。動態聯編 程式中若出現函式呼...