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
-
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 stehncout<<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.