1、類
類是具有相同屬性和行為的一組對象的集合,它為屬於該類的全部對象提供了統一的抽象描述,其內部包括屬性和行為兩個主要部分。
class Clock { public: void SetTime(int new_hour, int new_minute,int new_second); void ShowTime(); private: int hour, minute, second; };
(1)利用類可以實現數據的封裝,隱藏,繼承與派生。
封裝:將抽象出的數據成員、代碼成員相結合,將它們視為一個整體。目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只需要通過外部接口,以特定的訪問權限,來使用類的成員。實現封裝:類聲明中的{}
(2)利用類易於編寫大型復雜程序,其模塊化程度比采用函數更高。
函數:將邏輯上相關的語句與數據封裝,用於完成特定的功能;
類:將邏輯上相關的函數與數據封裝,對所要處理的問題進行描述。
(3)類是C++程序設計的核心成分,是C++封裝的基本單元,它把數據和函數封裝在一起。
2、類的構成
class類名標識符 { public: // 公有成員(外部接口) protected: // 保護成員 private: // 私有成員 };
(1)關鍵字class表示類,類名標識符一般首字母用大寫字母表示,以示與對象名的區別。(2)類的成員分為兩類:數據成員和成員函數。
(3)public、protected、private訪問控制
private(私有成員):只允許類內部的成員訪問,任何本類以外的成員(對象)均不能訪問。
public(公有成員):它們是類與外部的接口,任何外部函數都可以訪問公有成員。
protected(保護成員):與private類似,其差別表現在繼承與派生時對派生類的影響的不同。
3、成員函數
(1)成員函數與普通函數
成員函數屬於類,成員函數定義是類設計的一部分,其作用域是類作用域,而普通函數一般為全局函數。
成員函數的操作主體是對象,使用時通過捆綁對象來行使其職責,而普通函數被調用時沒有操作主體
(2)類中定義成員函數
成員函數的定義代碼可以放在類定義中。類中定義的成員函數的規模一般都比較小,語句只有1~5句。在類中定義的成員函數默認為內聯函數,即使沒有明確用inline標示。在C++中,類定義通常在頭文件中,因此這些成員函數定義也伴隨著進入頭文件,而內聯函數是可以放在頭文件中的。
(3)類後定義成員函數
將類定義和其成員函數定義分開,是目前開發程序的通常做法。
把類定義(頭文件)看成是類的外部接口;類的成員函數定義看成是類的內部實現(源文件)。
返回類型類標識符::成員函數名(參數表)
{}
其中::是作用域區分符。
如:voidA::Set(int a,int b){}
(4)重載成員函數
同一個類的成員函數可以重載,方法與非成員函數重載相同。不同類的成員函數同名,不是函數重載。類的成員函數與非成員函數同名,不是函數重載。
4、調用成員函數
(1)必須通過對象去調用,要指定對象和成員名,否則無意義。
格式:對象名.成員
(2)類類型作為一個構造類型,不但可以定義對象,而且可以定義對象指針或對象引用。
(3)this指針
this指針是C++實現封裝性的一種機制。程序運行時,系統自動為每個對象提供一個this指針,該this指針接受當前對象的地址,所有對成員的訪問都被隱含地加上前綴:this->。
如month=m;等價於this->month=m;
無論哪個對象調用,成員函數從獲得的參數(顯式的和隱含的)來判斷都清楚,所以成員函數中訪問成員無需對象名作前綴。