C 類與物件

2021-09-18 04:56:41 字數 2485 閱讀 6976

類和物件的學習大概進行了乙個多月,前期的概念性理論放在實戰中真的不是多好用,但直到親身做了乙個系統才發現,從前的知識有多有用。

這篇部落格大體就是總結一下這個模組學習到的乾貨。

一、什麼是類?什麼是物件?

起先以為「類」就是像struct那樣的結構體,但是從含義上類是一種拓展式結構體,要實現資料抽象和封裝。

而資料抽象就是在抽象的資料型別中實現下列操作:

(1)介面和實現分離

(2)類的介面包括使用者能執行的操作

(3)實現包括類的資料成員、負責介面實現的函式體以及定義類所需的各種私有函式

如果我們利用結構體進行資料抽象操作,會面對許多問題,比方說,只能利用指標操作全域性函式,與內建型別相比,既不直觀又不方便。

所以類就是結構體進行的新的拓展,其中的函式被稱為成員函式,資料稱為資料成員,拓展的結構體型別中的變數稱為物件。

二、資料成員的類內初始化

類內初始值將用於初始化資料成員,沒有初始值的成員將被預設初始化。

資料成員類內初始值只能放在等號「=」右邊,或者放在花括號「{}」裡,不能使用圓括號「()」。

特別注意:成員函式可以在類內定義也可以放在類外。

struct salesdata;

//成員函式的類外定義

double salesdata::totalrevenue()

void salesdata::read()

void salesdata::print()

也就是說,為了區別於全域性函式,成員函式在類外定義名稱前要加類名稱和作用域符「:」,因為在c++中每個類定義都引入了乙個類作用域。

三、訪問控制和封裝

該塊主要是講述類的安全性問題,從看待類的不同角度,可將程式設計師分為類的設計者和客戶成員。

類的設計者自然要了解類的每個細節,而客戶成員則只需掌握類的使用方法,那麼,如果修改了類的某個細節可能會造成使用者的麻煩,為解決這樣的問題,c++提供了一些方法對資訊進行隱藏。

(1)訪問限定符

c++通過限定成員的訪問許可權來實現資訊隱藏。

關鍵字public、private 和protected 被稱為訪問限定符,分別含義是:共有成員宣告、私有成員宣告、被保護成員宣告。

訪問限定符在類定義中使用,一般語法為

struct 類名

;公有成員可以被程式中任意函式、類內訪問,而私有成員只能被類內成員函式以及友元訪問,protected 成員可以由類自己的成員函式、友元、派生類成員訪問

注意:1、應該盡可能限制類成員的可訪問性

2、經驗之舉是採用最嚴格的可行的訪問級別

3、如果還不確定,多隱藏通常比少隱藏要好

(2)封裝/類和物件

將資料和操作**在一起,並加上訪問控制,稱為封裝。資料描述物件的屬性,操作描述物件的行為。

物件就是資料和操作的封裝體,物件導向程式設計的主要工作就是建立一組物件並給它們傳送訊息。

傳送訊息就是呼叫成員函式:

例如s.print()就是向物件s 傳送乙個print()訊息。

這裡特別引入乙個新的類的關鍵字:class

與struct成員的預設訪問限定是public不同,class預設是private,在今後的類的設計最為常用。

四、物件的布局

加上成員函式和訪問限定之後,物件是怎麼儲存的?這樣的物件又佔多少儲存空間呢?

答案是,簡單物件在記憶體中佔據的儲存空間是所有資料成員大小的和,但類的成員如果複雜結果不盡然相同。

c++的seizeof運算子可以用於類型別、物件和類的資料成員。

salesdata sd;

sizeof(salesdata);

//salesdata 型別的物件所佔空間大大小

sizeof sd;

//sd 的型別的大小,即sizeof(salesdata)

sizeof(salesdata::price);

//獲取類成員的大小,無需具體的物件

五、this指標

每個成員函式都有乙個隱含的引數,指向接收訊息的物件,稱為this指標。

1、x類的this指標的型別是x*

2、this指標是乙個常量,含有當前實施呼叫的物件的位址

3、不能改變this指標的值,也不能取this指標的位址

this指標在成員函式中的用途:

1、區分與資料成員同名的變數

2、返回當前物件

3、取得當前物件位址

六、訪問器和修改器

將資料成員限定為private,並提供public成員函式來對其進行訪問,這種成員函式被稱為訪問器(accessor)和修改器(mutator),常以一對getx()和setx() 函式的形式出現。

例子:struct rectangle

void setwidth(double newwid)

//height 的訪問器和修改器

double getheight()

void setheight(double newhei)

private:

double width;

double height;

C 類與物件

程式設計模型 所有計算機均由兩種元素組成 和資料.精確的說,有些程式是圍繞著 什麼正在發生 而編寫,有些則是圍繞 誰正在受影響 而編寫的.抽象封裝 封裝是一種把 和 所操作的資料 在一起,使這兩者不受外界干擾和誤用的機制.繼承 繼承是指乙個物件從另乙個物件中獲得屬性的過程.是物件導向程式設計的三大原...

C 類與物件

c 類與物件 區分物件導向與面向過程 物件導向是指一種程式設計范型,同時也是一種程式開發的方法。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性 靈活性和擴充套件性。物件導向 利用物件間的訊息傳遞來驅動程式的執行。優點 真實表現客觀世界,物件間的關係清晰,物件間的訊息處理高效。面...

C 類與物件

類是物件導向的核心機制,是物件導向設計中對具有相同或相似性質的物件的抽象,是對資料和操作進行封裝的載體,進而保證了對資料的安全 高效 合理的訪問 物件是類的例項,是類的具體個體,對應現實世界的實體。類的定義 class 類名 void showclock 習慣上在類的宣告中只定義函式的原型,在類外定...