סיכום – מנהל חשבונות בנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 33 מתוך 104.
אתגר
קלבואו נבנה מנהל חשבונות בנק מלא, שמשלב את כל המושגים שלמדת בפרק הזה בנוגע למאפייני מחלקות: איברים פרטיים עם פונקציות גישה ועדכון, פונקציות איבר const, איברים mutable, משתנים ומתודות סטטיים ופונקציות friend.
תיצור שני קבצים כדי לארגן את הקוד שלך:
BankAccount.h: הגדר מחלקה בשםBankAccountשמנהלת נתוני חשבון תוך שימוש בכימוס מתאים. המחלקה שלך צריכה לכלול:- איברים פרטיים:
accountNumber(מחרוזת),ownerName(מחרוזת),balance(מספר ממשי), וגםmutable int queryCountכדי לעקוב אחר מספר הפעמים שבהן נבדקה היתרה - איבר סטטי פרטי
totalAccountsכדי לעקוב אחר מספר החשבונות הקיימים - בנאי שמקבל את מספר החשבון, שם הבעלים והיתרה ההתחלתית. עליו לאתחל את
queryCountל-0ולהגדיל אתtotalAccounts - פונקציות גישה const:
getAccountNumber(),getOwnerName()ו-getBalance(): פונקציית הגישה ליתרה צריכה להגדיל אתqueryCountבכל פעם שהיא נקראת - פונקציית גישה 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>. המר את ערכי היתרה שהתקבלו כמחרוזות למספרים ממשיים באמצעות 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++ אונליין