תכונות (חברי נתונים)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 9 מתוך 104.
חברי נתונים (מאפיינים) מאחסנים את המצב של אובייקט. בדרך כלל מצהירים עליהם כעל private וניגשים אליהם באמצעות שיטות getter/setter ציבוריות. זה נקרא כימוס.
חברי נתונים פרטיים
class BankAccount {
private:
std::string accountName;
int balance;
};פעולות גישה ציבוריות לקבלת ערכים ולעדכונם
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};פונקציות קביעה עם אימות
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}מצייני גישה
class MyClass {
private: // נגיש רק בתוך המחלקה
int secret;
public: // נגיש מכל מקום
int getSecret() { return secret; }
protected: // נגיש במחלקה ובמחלקות הנגזרות ממנה
int shared;
};הפיכת איברי נתונים ל־private מסתירה אותם מקוד חיצוני. פונקציות גישה מחזירות את הערכים שלהם, ופונקציות הגדרה משנות אותם, עם אפשרות לאימות. כך הנתונים שלך מוגנים והגישה אליהם מבוקרת.
אתגר
בינוניצרו מחלקה BankAccount עם איברי נתונים פרטיים ומתודות גישה ציבוריות:
- איברים פרטיים:
accountName(מחרוזת),balance(int) - פעולות הגדרה:
setAccountName,setBalance - פעולות אחזור:
getAccountName,getBalance deposit(int amount): מוסיפה ליתרה אם amount > 0withdraw(int amount): מחזירה "Success" אם ניתן, אחרת "Insufficient funds"
נסו בעצמכם
#include <iostream>
#include "BankAccount.h"
int main() {
std::string name;
int initial, depositAmt;
std::getline(std::cin, name);
std::cin >> initial >> depositAmt;
BankAccount account;
account.setAccountName(name);
account.setBalance(initial);
std::cout << "Account: " << account.getAccountName() << std::endl;
std::cout << "Balance: " << account.getBalance() << std::endl;
account.deposit(depositAmt);
std::cout << "After deposit: " << account.getBalance() << std::endl;
std::string result = account.withdraw(2000);
std::cout << "Withdraw 2000: " << result << std::endl;
std::cout << "Final Balance: " << account.getBalance() << std::endl;
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות OOP
קבצים חיצונייםבנייה וקומפילציה של C++קובצי Header וקובצי מקורמרחבי שמות והיקףמבוא ל-OOP ב-C++מחלקות לעומת אובייקטיםמצביע thisמתודות (פונקציות איבר)תכונות (חברי נתונים)יסודות הבנאים וההורסיםסיכום – מחשבון פשוט4מאפייני מחלקה
חברי מופע לעומת חברים סטטייםגטרים וסטריםפונקציות איבר קבועותמילת המפתח mutableמתודות ומשתנים סטטייםפונקציות ומחלקות ידידותסיכום – מנהל חשבונות בנק7ירושה
ירושה בסיסיתרמות גישה בירושהסדר הקריאות לבנאי ולמפרקדריסת מתודותפונקציות וירטואליות ו־VTableירושה מרובהירושה וירטואליתסיכום – היררכיית עובדים2ניהול זיכרון
זיכרון Stack לעומת Heapמצביעים והפניותזיכרון דינמי (new/delete)מצביעים חכמים ב-C++RAII ב-C++סיכום – מנהל מערכים דינמיים5כימוס
מצייני גישה ב-C++מצייני גישה לעומקהסתרת מידעמבנה לעומת מחלקהמחלקות מקוננות ופנימיותסיכום – מערכת רשומות תלמידים8רב־צורתיות
רב־צורתיות בזמן קומפילציה לעומת בזמן ריצההעמסת פונקציותפונקציות וירטואליות — מבט נוסףפונקציות וירטואליות טהורותמחלקות מופשטותתכנון ממשקים ב־C++המרה דינמית ו־RTTIסיכום — מחשבון צורות3בנאים והורסים
בנאי ברירת מחדלבנאי עם פרמטריםבנאי העתקהבנאי העברהרשימות אתחול בבנאיםבנאים מאציליםמעמיקים בנושא הורסיםכלל השלושה / החמישה / האפססיכום – מחלקת String6העמסת אופרטורים
מבוא להעמסת אופרטוריםהעמסת אופרטורים אריתמטייםהעמסת אופרטורי השוואהאופרטורי זרםהעמסת אופרטור השמההעמסת האופרטורים [] ו־()אופרטורים להמרת טיפוסיםסיכום – מחלקת Matrix9תבניות
תבניות פונקציהתבניות מחלקההתמחות תבניותתבניות ארגומנטים משתנותיסודות SFINAE ותכונות טיפוסיםסיכום – מכל גנריתרגלו בעצמכם: קומפיילר C++ אונליין