類和物件的學習大概進行了乙個多月,前期的概念性理論放在實戰中真的不是多好用,但直到親身做了乙個系統才發現,從前的知識有多有用。
這篇部落格大體就是總結一下這個模組學習到的乾貨。
一、什麼是類?什麼是物件?
起先以為「類」就是像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 習慣上在類的宣告中只定義函式的原型,在類外定...