#include #include // Η Base κλάση πρέπει να είναι πολυμορφική (να έχει τουλάχιστον μία virtual function) class Account { public: virtual void withdraw(double amount) { std::cout << "Ανάληψη " << amount << " από τον βασικό λογαριασμό." << std::endl; } virtual ~Account() {} // Απαραίτητος ΠΑΝΤΑ ο virtual destructor }; class SavingsAccount : public Account { public: void applyInterest() { std::cout << "Εφαρμογή επιτοκίου στον αποταμιευτικό λογαριασμό!" << std::endl; } }; class CheckingAccount : public Account { public: void printStatement() { std::cout << "Εκτύπωση κίνησης λογαριασμού όψεως." << std::endl; } }; void processAccount(Account* acc) { // Θέλουμε να καλέσουμε την applyInterest(), αλλά αυτή υπάρχει ΜΟΝΟ στην SavingsAccount. // Χρησιμοποιούμε dynamic_cast για να ελέγξουμε με ασφάλεια. SavingsAccount* savings = dynamic_cast(acc); if (savings != nullptr) { // Η μετατροπή πέτυχε! Το acc δείχνει όντως σε SavingsAccount. savings->applyInterest(); } else { // Η μετατροπή απέτυχε. Το acc είναι κάτι άλλο (π.χ. CheckingAccount). std::cout << "Αποτυχία cast: Αυτός ο λογαριασμός είναι επαγγελματικός." << std::endl; } } int main() { // Δημιουργούμε ένα vector από διαφορετικούς λογαριασμούς (Base pointers) std::vector bank_vault; bank_vault.push_back(new SavingsAccount()); bank_vault.push_back(new CheckingAccount()); for (Account* acc : bank_vault) { processAccount(acc); delete acc; } return 0; }