1. 程式人生 > 其它 >C++面向物件總結——封裝

C++面向物件總結——封裝

目錄

  • 類的封裝
  • 資料域封裝的優點

一,類的封裝

封裝的含義:

  • 所以屬性都是私有的,外部不可以訪問
  • 提供與屬性相關的get/set函式,間接訪問私有屬性。

示例:

class Clock
{
private:
int hour,minute,second;
public:
Clock();//宣告無參建構函式
Clock(int newH,int newM,int newS);//宣告有參建構函式
//行內函數,設定屬性值set
void  setHour(int hour)
{
this->hour=hour;
}
void  setMinute(int minute)
{
this->minute=minute;
}
void setSecond(int second) { this->second=second; } //獲得屬性值get int geHour() { return hour; } int getMinute() { return minute; } int getSecond() { return second; } //定義無參建構函式 Clock::Clock():hour(1),minute(1),second(1){} //定義有參建構函式 Clock::Clock(int newH,int newM,int newS):hour(newH),minute(newM),second(newS){}
//呼叫 int main() { Clock myclock1//定義物件,此時會自動呼叫無參建構函式 Clock myclock2(8330//定義物件,此時會呼叫有參建構函式 myclock2.getSecond(); myclock2.setSecond(2); }

二,資料域封裝的優點

1️⃣防止對封裝資料的越權訪問

宣告在class類中private屬性的成員,如果需要訪問只能通過get函式間接訪問

2️⃣限制私有特性改變時產生的連鎖反應

如圖,在編寫玩程式碼後,如果需要修改(人的年紀是一直增長的,因此如果對其進行升級程式碼),我們只需要修改私有屬性和函式內部即可,不用對程式碼整體進行調整,方便維護。

3️⃣保持資料完整性

該段程式碼中,定義了私有成員:birthdate變數和setBirthdate函式(因此不能在外部呼叫setBirthdate)。但是在公有成員的updateBirthdate函式中呼叫了私有函式setBirthdate進行對生日的格式檢查。

Student s;
strcpy(newDate,"03/27/1997");

if(!(s.updateBirthdate(newDate))
{
....
}

這樣做的好處就是:只要birthdate能被賦值,就一定會得到所設定的格式,保持了資料的完整性