C++面向物件總結——封裝
阿新 • • 發佈:2021-08-11
目錄
- 類的封裝
- 資料域封裝的優點
一,類的封裝
封裝的含義:
- 所以屬性都是私有的,外部不可以訪問
- 提供與屬性相關的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(8,3,30)//定義物件,此時會呼叫有參建構函式 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能被賦值,就一定會得到所設定的格式,保持了資料的完整性