Destruktor



  • #include <iostream>
    #include <conio.h>
    using namespace std;
    
    class Konto {
          private :
          char Name[80];
          static int KontoNrAnz;
          int KontoNr;
          int Balance;
    
          public:
          explicit Konto(char *,int);
    //      ~Konto(void);
          bool einzahlen(int);
          bool auszahlen(int);
          bool ueberweisen(Konto &,int);
          void getData(void);
          };
    
    int main(){
        Konto *Alex=new Konto("Alex",6000);
        Alex->getData();
        Konto Jens("Jens",1000);
        Jens.getData();
        cout<<"====Ueberweisung===von alex konto 2000 auf Jens\n"<<endl;;
        Alex->ueberweisen(Jens,2000);
        Alex->getData();
        Jens.getData();
    
        getch();    
        return 0;    
        };
    
    int Konto :: KontoNrAnz=0;    
    
    Konto :: Konto (char *text,int Bal) {
          strcpy(this->Name,text);
          this->Balance=Bal;
          this->KontoNrAnz++;   
          KontoNr=this->KontoNrAnz;;     }
    
    void Konto :: getData(void) {
         cout<<"Name      : "<<this->Name<<endl;
         cout<<"Kontonr   : "<<this->KontoNr<<endl;
         cout<<"Ersparnis : "<<this->Balance<<endl<<endl;
         }
    
    bool Konto :: einzahlen(int wert) {
         if(wert>0)
         this->Balance+=wert; }
    
    bool Konto :: auszahlen(int wert) {
         if (wert <= this->Balance)
         this->Balance-=wert;    }
    
    bool Konto :: ueberweisen(Konto &obj,int wert) {
         auszahlen(wert);
         obj.einzahlen(wert);
                  };
    

    Hallo wie muss der Destruktor für meine Klasse aussehen bzw die Paramterliste

    Konto :: ~Konto()  {
    delete[](...);      }
    


  • Destruktoren haben nie Parameter. Du musst einfach schauen, dass du alles, was mit new angefordert wurde, wieder mit delete freigibst - analog bei new[] respektive delete[] , wenn du Arrays allokierst.

    Du solltest auch dran denken, Kopierkonstruktor und Zuweisungsoperator ordentlich zu implementieren, wenn du später keine Probleme willst. Stichwort "The Big Three" (Regel der Grossen Drei).



  • Du prüfst in deinem Konstruktor übrigens nicht die Länge des Quellstrings ab, was zu schwerwiegenden Problemen führen kann! Ich würde in Erwägung ziehen, einen std::string als member zu verwenden.



  • ok danke für den tipps zum kopierkonstruktor eben grad wusste ich garnicht was das ist aber ich benutz ja keine zeiger und referenzen in meiner klasse sondern übergebe an einer methode in meiner klasse eine referenz trotzdem danke das muss ich mir mal genauer durchlesen mit dem kopierkonstruktor



  • für die Tipps sry wegen rechtschreibung 🙂



  • Stimmt, momentan bräuchtest du gar keine grossen Drei. std::string ist trotzdem ein guter Hinweis, damit kannst du dir strcpy() und solche Dinge sparen, bist zudem nicht auf 80 Zeichen beschränkt.

    Den Alex solltest du am Ende von main() schon nur aus Stilgründen wieder mit delete löschen - der darf nicht weiterleben! 🤡



  • Die Drei braucht er wegen seinem counter.


Anmelden zum Antworten