Mehrere leichte logische Fragen



  • #include <iostream>
    #include <conio.h>
    using namespace std;
    
    class Konto {
          private :
          char Name[80];
          static int KontoNr;
          int Balance;
    
          public:
          Konto(char *,int);
    //      ~Konto(void);
          bool einzahlen(int);
          bool auszahlen(int);
    //      bool ueberweisen(int);
          void getData(void);
          };
    
    int main(){
        Konto Jens("Jens",5000);
        Jens.getData();
        Konto Hubi("Hubi",9000);
        Hubi.getData();
        Konto *Alex=new Konto("Hannes",6000);
        Alex->getData();
    
        cout<<sizeof(Alex)<<endl;
        cout<<sizeof(Hubi)<<endl;    
    
        getch();    
        return 0;    
        };
    
    int Konto :: KontoNr=0;    
    
    Konto :: Konto (char *text,int Bal) {
          strcpy(this->Name,text);
          this->Balance=Bal;
          KontoNr++;        }
    
    void Konto :: getData(void) {
         cout<<"Name      : "<<this->Name<<endl;
         cout<<"Kontonr   : "<<this->KontoNr<<endl;
         cout<<"Ersparnis : "<<this->Balance<<endl;
         }
    

    so der code funktioniert nach mehrmaligen ausprobieren ist auch nicht ganz fertig.
    1 Frage Ich erstell ja 3 Instanzen der Klasse Konto jens,hubi und alex.alex mit new als schlüsselwort wieso ist alex 4 byte gross und jens 84 byte ?
    2 Frage Beim Konstruktor steht / Konto :: Konto (char *text,int Bal) / übergeben wird ein zeiger char und int ich habe versucht anstatt zeiger eine referenz anzugeben (&text) wieso kommt ein compilerfehler ?
    3 Frage Wieso muss ich beim zeiger mit Alex->getData() wieso geht nicht Alex.getData()

    vielen dank für eure antworten



  • ad 1: bei der größe von alex bekommst du die größe vom zeiger und nicht von der klasse.
    ad 2: was hast du genau gemacht? du musst aufpassen &var bedeuted die adresse einer variable.
    ad 3: weil du bei pointern eine andere syntax hast.

    jperl


  • Mod

    Kathir schrieb:

    so der code funktioniert nach mehrmaligen ausprobieren ist auch nicht ganz fertig.
    1 Frage Ich erstell ja 3 Instanzen der Klasse Konto jens,hubi und alex.alex mit new als schlüsselwort wieso ist alex 4 byte gross und jens 84 byte ?

    Weil alex bei dir ein Zeiger auf Konto ist, währen jens ein Konto ist.

    2 Frage Beim Konstruktor steht / Konto :: Konto (char *text,int Bal) / übergeben wird ein zeiger char und int ich habe versucht anstatt zeiger eine referenz anzugeben (&text) wieso kommt ein compilerfehler ?

    Weil du die Übergabe von arrays und Referenzen nicht so mischen kannst, wie du es hier beschreibst.

    3 Frage Wieso muss ich beim zeiger mit Alex->getData() wieso geht nicht Alex.getData()

    Siehe Antwort auf Frage 1

    so der code funktioniert nach mehrmaligen ausprobieren ist auch nicht ganz fertig.

    Dein Code steckt noch voller gravierender Fehler. Soll ich mir die Mühe machen, das etwas zu erläutern?

    vielen dank für eure antworten

    Gern geschehen.



  • zu 1
    ok danke für deine Hilfe ja hab ich auch bemerkt da muss stehn

    cout<<sizeof(*Alex);
    

    um auf den Inhalt zu zeigen stimmt

    zu 3
    ok andere syntax aber wenn ich den Inhalz anzeige also
    *Alex.getData(); das klappt ja auch nicht
    Alex ist ein zeiger
    *Alex ist der Inhalt also die klasse
    wieso klappt das dann immer noch nicht *Alex.getData();

    ich denke ich hab das mit den zeigern wohl nicht so gerafft 🙂

    zu 2
    wieso klappt ein Zeiger
    Konto :: Konto (char *text,int Bal)
    und keine referenz
    Konto :: Konto (char &text,int Bal)

    ich versteh dann auch nicht wie der Konstruktor das macht
    Konto :: Konto (char *text,int Bal) nehmen wie an er bekommt Jens und 500
    dann ist *text=Jens // also der Inhalt des Zeigers wird mit einem Array namens jens gefüllt so jetzt versteh ich nicht die 2te anweisung wieso die klappt
    da steht strcpy(Name,text) mit text sprech ich doch die speicheradresse an also den Zeiger und nicht den inhalt wieso klappt diese funktion trotzdem



  • Kathir schrieb:

    *Alex.getData(); das klappt ja auch nicht

    *(Alex).getData();
    vielleicht?



  • Belli schrieb:

    *(Alex).getData();
    vielleicht?

    Wenn schon, dann so:

    (*Alex).getData();
    

    Oder gleich übersichtlich:

    Alex->getData();
    


  • Liegt daran, dass "->" und "." eine höhere Priorität haben als der Dereferenzierungs-Operator "".
    D.h. in solchen Fällen muss über Klammern dem "
    " der Vorrang gewährt werden. Siehe Beitrag von Nexus.


Anmelden zum Antworten