Özet - Banka Hesabı Yöneticisi
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 33 / 104.
Görev
KolayBu bölümde öğrendiğiniz tüm sınıf özelliği kavramlarını bir araya getiren eksiksiz bir Banka Hesabı Yöneticisi oluşturalım: getter ve setter'lara sahip özel (private) üyeler, const üye fonksiyonlar, mutable üyeler, statik değişkenler ve metotlar ve arkadaş (friend) fonksiyonlar.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
BankAccount.h: Uygun kapsülleme (encapsulation) ile hesap verilerini yöneten birBankAccountsınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:- Özel (private) üyeler:
accountNumber(string),ownerName(string),balance(double) ve bakiyenin kaç kez kontrol edildiğini takip etmek için birmutable int queryCount - Kaç tane hesap olduğunu takip etmek için özel bir statik üye
totalAccounts - Hesap numarasını, sahip adını ve başlangıç bakiyesini alan bir yapıcı (constructor).
queryCountdeğerini0olarak başlatmalı vetotalAccountsdeğerini artırmalıdır - Const getter'lar:
getAccountNumber(),getOwnerName()vegetBalance()— bakiye getter'ı her çağrıldığındaqueryCountdeğerini artırmalıdır - Bakiyenin kaç kez kontrol edildiğini döndüren bir const getter
getQueryCount() - Yalnızca miktar pozitifse bakiyeye ekleme yapan bir
deposit(double amount)metodu - Yalnızca miktar pozitifse ve mevcut bakiyeyi aşmıyorsa bakiyeden çıkarma yapan bir
withdraw(double amount)metodu - Oluşturulan toplam hesap sayısını döndüren statik bir metot
getTotalAccounts() - Hesaplar arasında para taşıyan bir arkadaş (friend) fonksiyonu
transfer(BankAccount& from, BankAccount& to, double amount)bildirin — bu fonksiyon yalnızca miktar pozitifse ve kaynak hesapta yeterli bakiye varsa transfer yapmalıdır
Statik üyeyi ve arkadaş fonksiyonu sınıf tanımından sonra tanımlayın.
- Özel (private) üyeler:
main.cpp: Tüm bu özelliklerin birlikte çalıştığını gösterin. Girişten iki sahip adı ve iki başlangıç bakiyesi okuyun (toplam dört satır: name1, balance1, name2, balance2), ardından:"ACC001"ve"ACC002"hesap numaralarına sahip ikiBankAccountnesnesi oluşturun"Total accounts: <count>"yazdırın- İlk hesap için
"<name>: "<name>: $<balance>"lt;balance>"yazdırın - İkinci hesap için
"<name>: "<name>: $<balance>"lt;balance>"yazdırın - İlk hesaba
500.0yatırın - İlk hesap için
"After deposit - <name>: "After deposit - <name>: $<balance>"lt;balance>"yazdırın - Arkadaş fonksiyonu kullanarak ilk hesaptan ikinci hesaba
300.0transfer edin "After transfer:"yazdırın- İlk hesap için
" <name>: " <name>: $<balance>"lt;balance>"yazdırın - İkinci hesap için
" <name>: " <name>: $<balance>"lt;balance>"yazdırın - İlk hesap için
"Query count for <name>: <count>"yazdırın
Tüm bakiye değerlerini <iomanip> kütüphanesinden std::fixed ve std::setprecision(2) kullanarak iki ondalık basamakla biçimlendirin. Bakiye girişlerini std::stod() kullanarak string'den double'a dönüştürün.
Başlık dosyanızda header guard kullanmayı ve gerektiğinde <string> ve <iostream> kütüphanelerini dahil etmeyi unutmayın.
Kendin dene
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// Girdiyi oku
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);
// Çıktı biçimlendirmesini 2 ondalık basamak için ayarla
std::cout << std::fixed << std::setprecision(2);
// TODO: "ACC001" ve "ACC002" hesap numaralarına sahip iki BankAccount nesnesi oluşturun
// TODO: "Total accounts: <count>" yazdırın
// TODO: İlk hesap için "<name>: $<balance>" yazdırın
// TODO: İkinci hesap için "<name>: $<balance>" yazdırın
// TODO: İlk hesaba 500.0 yatırın
// TODO: İlk hesap için "After deposit - <name>: $<balance>" yazdırın
// TODO: friend fonksiyonunu kullanarak ilk hesaptan ikinciye 300.0 transfer edin
// TODO: "After transfer:" yazdırın
// TODO: İlk hesap için " <name>: $<balance>" yazdırın (2 boşluklu girintiye dikkat edin)
// TODO: İkinci hesap için " <name>: $<balance>" yazdırın (2 boşluklu girintiye dikkat edin)
// TODO: İlk hesap için "Query count for <name>: <count>" yazdırın
return 0;
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner