סיכום – מנהל חשבונות בנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 33 מתוך 104.
אתגר
קלבואו נבנה מנהל חשבונות בנק מלא שמשלב את כל המושגים שלמדתם בפרק הזה בנוגע לתכונות של מחלקות: איברים פרטיים עם פונקציות getter ו-setter, פונקציות איבר const, איברים mutable, משתנים ומתודות סטטיים ופונקציות friend.
תיצרו שני קבצים כדי לארגן את הקוד:
BankAccount.h: הגדירו מחלקהBankAccountשמנהלת נתוני חשבון באמצעות כימוס מתאים. המחלקה שלכם צריכה לכלול:- איברים פרטיים:
accountNumber(מחרוזת),ownerName(מחרוזת),balance(מספר double), ו-mutable int queryCountכדי לעקוב אחר מספר הפעמים שבהן נבדקה היתרה - איבר סטטי פרטי
totalAccountsכדי לעקוב אחר מספר החשבונות הקיימים - בנאי שמקבל את מספר החשבון, את שם הבעלים ואת היתרה ההתחלתית. עליו לאתחל את
queryCountל-0ולהגדיל אתtotalAccounts - פונקציות getter מסוג const:
getAccountNumber(),getOwnerName()ו-getBalance(): פונקציית ה-getter של היתרה צריכה להגדיל אתqueryCountבכל פעם שקוראים לה - פונקציית getter מסוג const בשם
getQueryCount()שמחזירה את מספר הפעמים שבהן נבדקה היתרה - מתודה
deposit(double amount)שמוסיפה ליתרה רק אם הסכום חיובי - מתודה
withdraw(double amount)שמחסירה מהיתרה רק אם הסכום חיובי ואינו עולה על היתרה הנוכחית - מתודה סטטית
getTotalAccounts()שמחזירה את מספר החשבונות הכולל שנוצרו - הצהירו על פונקציית friend בשם
transfer(BankAccount& from, BankAccount& to, double amount)שמעבירה כסף בין חשבונות. היא צריכה לבצע את ההעברה רק אם הסכום חיובי ולחשבון המקור יש מספיק כסף
הגדירו את האיבר הסטטי ואת פונקציית ה-friend אחרי הגדרת המחלקה.
- איברים פרטיים:
main.cpp: הדגימו כיצד כל התכונות האלה פועלות יחד. קראו מהקלט שני שמות של בעלי חשבונות ושתי יתרות התחלתיות (ארבע שורות בסך הכול: name1, balance1, name2, balance2), ולאחר מכן:- צרו שני אובייקטים מסוג
BankAccountעם מספרי החשבון"ACC001"ו-"ACC002" - הדפיסו
"Total accounts: <count>" - הדפיסו
"<name>: $<balance>"עבור החשבון הראשון - הדפיסו
"<name>: $<balance>"עבור החשבון השני - הפקידו
500.0לחשבון הראשון - הדפיסו
"After deposit - <name>: $<balance>"עבור החשבון הראשון - העבירו
300.0מהחשבון הראשון לחשבון השני באמצעות פונקציית ה-friend - הדפיסו
"After transfer:" - הדפיסו
" <name>: $<balance>"עבור החשבון הראשון - הדפיסו
" <name>: $<balance>"עבור החשבון השני - הדפיסו
"Query count for <name>: <count>"עבור החשבון הראשון
- צרו שני אובייקטים מסוג
עצבו את כל ערכי היתרה עם שתי ספרות אחרי הנקודה העשרונית באמצעות std::fixed ו-std::setprecision(2) מתוך <iomanip>. המירו את קלטי היתרה ממחרוזות למספרי double באמצעות std::stod().
אל תשכחו להוסיף guards לכותרת בקובץ הכותרת שלכם ולכלול את <string> ואת <iostream> במקומות הדרושים.
נסו בעצמכם
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// קרא את הקלט
std::string name1, name2;
std::string balance1Str, balance2Str;
std::getline(std::cin, name1);
std::getline(std::cin, balance1Str);
std::getline(std::cin, name2);
std::getline(std::cin, balance2Str);
double balance1 = std::stod(balance1Str);
double balance2 = std::stod(balance2Str);
// הגדר את עיצוב הפלט ל-2 ספרות אחרי הנקודה העשרונית
std::cout << std::fixed << std::setprecision(2);
// TODO: צור שני אובייקטים מסוג BankAccount עם מספרי החשבון "ACC001" ו-"ACC002"
// TODO: הדפס "Total accounts: <count>"
// TODO: הדפס "<name>: $<balance>" עבור החשבון הראשון
// TODO: הדפס "<name>: $<balance>" עבור החשבון השני
// TODO: הפקד 500.0 בחשבון הראשון
// TODO: הדפס "After deposit - <name>: $<balance>" עבור החשבון הראשון
// TODO: העבר 300.0 מהחשבון הראשון לשני באמצעות פונקציית friend
// TODO: הדפס "After transfer:"
// TODO: הדפס " <name>: $<balance>" עבור החשבון הראשון (שים לב להזחה של 2 רווחים)
// TODO: הדפס " <name>: $<balance>" עבור החשבון השני (שים לב להזחה של 2 רווחים)
// TODO: הדפס "Query count for <name>: <count>" עבור החשבון הראשון
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++ אונליין