C++ ——類
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;
無論哪個對象調用,成員函數從獲得的參數(顯式的和隐含的)來判斷都清楚,是以成員函數中通路成員無需對象名作字首。