你好社区,多重继承和破坏子对象的问题

问题描述 投票:0回答:0

第 1 部分: 我有一个超类 compteBancaire,它有两个子类 compteCourant 和 compteEpargne 以及另一个子类 compteCourantEpargne,它继承了 compteCourant 和 compteEpargne 的多重继承。

第 2 部分: 我有一个包含 CompteBancaire* 动态数组的 Banque 类,Banque 类包含一些方法,例如: ajouterCompte(CompteBancaire*) 可以将 compteBancaire* 添加到动态数组。 supprimerCompte(string numero) 假设找到一个带有传入参数的字符串的对象并将其删除,但是这个函数不能分别对每个对象进行操作, 但是当我尝试删除所有对象(4 个对象,每个类的一个对象)时,该函数会完美地完成他认为应该做的事情。 superClass compteBancaire :

class CompteBancaire
{
protected:
    string numero;
    double solde;

public:

    //contructeur par defaut et d'initialisation et destructeur
    CompteBancaire();
    CompteBancaire(string, double);
    virtual ~CompteBancaire();

    //getters & setters
    string getNumero() const;
    double getSolde() const;
    void setNumero(string);
    void setSolde(double);

    //methode retirer montant
    bool retirer(double);

    //methode deposer montant
    virtual bool deposer(double);

    //methode afficher informations du CompteBancaire
    virtual void afficher() const;
};
CompteBancaire::~CompteBancaire()
{
    cout << "\n******* suppression d'un compte *******" << endl;
}

子类 CompteCourat :

class CompteCourant : virtual public CompteBancaire
{
protected:
    double decouvertAutorise;

public:
    //contructeur par defaut et d'initialisation et destructeur
    CompteCourant();
    CompteCourant(string, double, double);
    virtual ~CompteCourant();

    //getters & setters
    double getDecouvertAutorise() const;
    void setDecouvertAutorise(double);

    //methode retirer un montant du CompteCourant
    bool retirer(double);

    //methode affcicher les informations du CompteCourant
    void afficher() const;
};
CompteCourant::~CompteCourant()
{
}

子类CompteEpargne:

class CompteEpargne : virtual public CompteBancaire
{
protected:
    double tauxInteret;

public:

    //constructeur par defaut et d'initialisation et destructeur
    CompteEpargne();
    CompteEpargne(string, double, double);
    virtual ~CompteEpargne();

    //getters & setters
    double getTauxInteret() const;
    void setTauxInteret(double);

    //methode deposer
    bool deposer(double);

    //methode afficher
    void afficher() const;
};

CompteEpargne::~CompteEpargne()
{
}

子类 compteCourantEpargne :

class CompteCourantEpargne : public CompteCourant, public CompteEpargne
{
public:

    //constructeur par defaut et d'initialisation et destructeur
    CompteCourantEpargne();
    CompteCourantEpargne(string, double, double, double);
    virtual ~CompteCourantEpargne();

    //methode deposer
    bool deposer(double);

    //methode retirer
    bool retirer(double);

    //methode afficher
    void afficher() const;
};
CompteCourantEpargne::~CompteCourantEpargne()
{
}

银行类:

class Banque
{
private:
    vector<CompteBancaire*> comptesBancaires;

public:

    //methode ajouter compte Bancaire a la banque
    bool ajouterCompte(CompteBancaire*);

    //methode qui permet de supprimer un compte bancaire
    bool supprimerCompte(string);

    //methode qui permet d'afficher les comptes de la banque
    void afficherComptes();

    //methode getTotalSoldes() retourne le solde total des comptes geres par la banque
    void getTotalSoldes();

};
bool Banque::ajouterCompte(CompteBancaire* compte)
{
    this->comptesBancaires.push_back(compte);
    return true;
}

bool Banque::supprimerCompte(string numero)
{
    for (int i = 0; i < comptesBancaires.size(); i++) {
        if (comptesBancaires[i]->getNumero() == numero) {
            delete comptesBancaires[i];
            comptesBancaires.erase(comptesBancaires.begin() + i);
            return true;
        }
        else {
            return false;
        }
   }

主文件:(在这种情况下,我删除了所有对象并且它有效,但是当我尝试分别删除每个对象时他不起作用)

int main()
{
    //creation de la Banque
    Banque banque;

    cout << "\n****************** Les quatres types de comptes ****************************\n" << endl;
    //creation des differents types de comptes
    CompteBancaire* compteBancaire = new CompteBancaire("CB", 135000.59);
    CompteBancaire* compteCourant = new CompteCourant("CC", 93500.00, 1150.00);
    CompteBancaire* compteEpargne = new CompteEpargne("CE", 23500.00, 5.5);
    CompteBancaire* compteCourantEpargne = new CompteCourantEpargne("CCE", 340660.73, 2000.00, 6);

    //l'ajout des differents types de compte a la banque
    banque.ajouterCompte(compteBancaire);
    banque.ajouterCompte(compteCourant);
    banque.ajouterCompte(compteEpargne);
    banque.ajouterCompte(compteCourantEpargne);

    //depot d'argent
    compteBancaire->deposer(1000);
    compteCourant->deposer(1500);
    compteEpargne->deposer(2000);
    compteCourantEpargne->deposer(2500);

    //retrait d'argent
    compteBancaire->retirer(500);
    compteCourant->retirer(500);
    compteEpargne->retirer(500);
    compteCourantEpargne->retirer(500);

    //affichage des comptes et totales de la banque avant la suppression de quelque uns
    banque.afficherComptes();
    banque.getTotalSoldes();

    //suppression des deux comptes
    banque.supprimerCompte("CB");
    banque.supprimerCompte("CC");
    banque.supprimerCompte("CE");
    banque.supprimerCompte("CCE");
    cout << "\n****************** Apres suppression ***************************************\n" << endl;

    //affichage des comptes de la banque apres la suppression de quelque uns
    banque.afficherComptes();

    //affichage du total des soldes de l'ensemble des comptes de la banque
    banque.getTotalSoldes();


    cout << "\n****************** Fin Programme ***************************************\n" << endl;
    return 0;

    
}

如果有人能帮助我,请多多指教! 谢谢你的帮助,对不起我的英语。

我试着在网上找东西但没有结果

c++ polymorphism multiple-inheritance virtual-functions virtual-inheritance
© www.soinside.com 2019 - 2024. All rights reserved.