類和類的封裝

2021-07-25 16:24:41 字數 2722 閱讀 7764

在日常生活中,我們總是將事物進行分門別類。列如:電腦,手機,相機等等,這些稱呼都是對於某一類事物的總稱。我們還能將電腦按照品牌分類,比如,戴爾電腦、惠普電腦、蘋果電腦、華碩電腦等。這些都是抽象的概念。我的電腦這個實體,它就是乙個具體的事物,我的電腦是戴爾的,但我不能說戴爾電腦是我的電腦。

類和物件是面對物件的兩個基本概念,「類」指的是一類事物,是乙個抽象的概念,比如我們所說的電腦;而「物件」指的是屬於摸個類的乙個實體,是乙個具體存在的事物,比如我的電腦;

類是一種「模板」,可以通過這種模板建立出不同的物件「例項」,而物件「例項」是類「模板」的乙個具體實現;乙個類可以有很多物件,而乙個物件必然屬於某個類。

同乙個類的不同物件都有對應的類中的屬性和行為,但是這些屬性和行為可能不完全相同。

從上面的描述我們可以知道,類是用於抽象的描述一類事物所特有的屬性和行為,比如:電腦類的每個物件都有cpu,記憶體和硬碟,電腦類的每個物件都可以開機和執行程式。

而物件是乙個具體的事物,擁有其所屬類的所有屬性,並且每個屬性都是乙個特定的值。比如:老虎的每個物件(也就是每只老虎),都有不同的體重,不同的食量以及不同的性情。

屬性主要用於描述類的靜態特性,行為主要用於描述類的動態特性。如:老虎類的屬性有顏色,體重,而行為有捕獵和逃跑,而兔子類的屬性也有顏色和體重,但是兔子類的行為沒有捕獵,只有逃跑。另外,從乙個更高的層面看,老虎和兔子都屬於動物類,它們都繼承了動物類的屬性和行為,另外又又自己特定的屬性和行為。

按上面所說,我們所說的電腦類,在電腦類的基礎上,我們又可以將電腦類按照品牌換分為戴爾電腦、惠普電腦、蘋果電腦、華碩電腦等。但是我們可以發現,戴爾電腦、惠普電腦、蘋果電腦、華碩電腦這些類和原來的電腦類是有關係的,這種關係就叫做繼承。繼承的類擁有原來的類的所有屬性,如戴爾電腦就是一種電腦,它同樣擁有cpu,記憶體和硬碟。

繼承出來的心累可以擁有自己特有的屬性和行為。

說了那麼多,怎麼在程式中表示乙個類呢?

c++提供了如char、int、long、float、double等基本資料型別,足夠用來解決大多數哦相對簡單的問題,但對於複雜的問題就比較困難了。

c++的乙個實用特性是自定義資料型別;如之前的列舉和結構體:

struct datestruct;
列舉和結構體代表了傳統的面向過程程式設計,它們只包含資料,如果需要訪問此型別變數,必須提供自定義函式,並以該型別變數為引數。在oop世界中,我們希望自己的型別不僅包括資料,也包括運算元據的函式;c++中,通過class關鍵字來宣告乙個類。

class

date;

類似結構體,類的宣告沒有分配記憶體,只是說明了類的結構;類的宣告以分號結尾;

為了使用類,可以宣告乙個該型別的變數:

date today;

today.year = 2016;

today.month = 12;

today.day = 28;

宣告乙個類的變數,也叫例項化乙個類;該變數稱作為類的乙個例項,或者物件。

類不僅僅包含資料(屬性),亦可以包含函式(行為),稱作成員函式:

class

date

};

成員函式可以類似訪問成員變數,使用』.』來使用。

類通常分為以下兩個部分:類的實現細節和類的使用方式。當使用類時,不需要關心其實現細節;當建立乙個類時,才需要考慮其內部實現細節;列如,我們在使用手機時,只需要知道怎麼打**,發簡訊,拍照等功能怎麼使用就行了,而不必知道手機內部的實現細節。而手機開發工程師就需要知道其中的細節問題。

根據日常生活中的經驗:並不是類的每個屬性都是對外公開的,而一些類的屬性是對外公開的,因此,需要在類的表示法中定義屬性和行為的公開級別。

在c++中,可以對類的成員設定訪問許可權。c++提供了3種不同的訪問識別符號:public、private、protect,分別是公有的、私有的和保護的。

class

date//公有

private:

int date_b;//私有

int getb()//私有

protected:

int date_c;//保護的

int getc()//保護的

};int main()

類成員的作用域都只在類的內部,外部無法直接訪問,成員函式可以直接訪問成員變數和呼叫其它成員函式;類的外部可以通過類變數訪問public成員,類成員的作用域與訪問級別沒有關係。

c++中用struct定義的類的所有成員預設為public;用class定義的類,在不使用訪問識別符號的情況下,預設是私有的。

封裝的思想就是將實現的細節隱藏,而暴露公有介面;

c++中的訪問識別符號,可以實現在類中的封裝;通常是將所有的成員變數私有化;

儘管看起來訪問成員變數的不直接,但使程式更有可重用性和可維護性;

a)封裝實現,無論類的實現如何改變,只要對外的介面不發生變化即可。

class

change;

int main()

如上,如果m_value被重新命名了,那麼main函式中訪問就會出錯;

如果提供了m_value的訪問函式:

class change

void setvalue(int

value)

}; int main()

c 類和類的封裝

1.類和類成員 c 提供了如char int long float double等基本資料型別,足夠用來解決大多數哦相對簡單的問題,但對於複雜的問題就比較困難了。c 的乙個實用特性是自定義資料型別 如之前的列舉和結構體 struct goods struct 類中預設訪問限定符是公有的,oop類中預...

類的封裝和過載

一 類的封裝是指將物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問物件的內部資訊,通過該類所提供的方法來實現對內部資訊的操作訪問。使用private關鍵字來修飾,私有屬性只能在他所在類中被訪問 如果外界想要訪問私有屬性,需要提供一些使用public修飾的公有方法 二 過載 方法過載是指在乙個類中...

類和物件封裝

屬性和行為 案例 設計學生類 訪問許可權 class 和 struct 的區別 成員屬性私有化 設計案例1 立方體類 設計案例2 點和圓關係 1 屬性和行為 includeusing namespace std const double pi 3.14 c 物件導向的三大特性 封裝 繼承 多型 萬事...