Funktionsaufruf mit Pointer
-
Hey Community,
an diesem Code sitze ich auch schon ne halbe Ewigkeit.
#include <iostream> #include <string> using namespace std; class myClass { private: unsigned int n; string text; public: void Loop1() { do { if (n%2==0) text = "0" + text; else text = "1" + text; n/=2; } while (n!=0); } void get_result() { cout << "\nErgebnis: " << text << endl; } myClass(int x):n(x) { } }; int main() { int i=-1; myClass * cPtr; while (i>-4) { cPtr=new myClass(i); cPtr->Loop1(); cPtr->get_result(); i--; } return 0; }Ausgabe:
Ergebnis: 11111111111111111111111111111111 Ergebnis: 11111111111111111111111111111110 Ergebnis: 11111111111111111111111111111101Ich habe auf Anhieb verstanden was hier Sache ist. Aber da sind ein paar Punkte die ich einfach nicht verstehe.
{ do { if (n%2==0) text = "0" + text; else text = "1" + text; n/=2; // n=n/2 } while (n!=0); }Also was hier passiert ist klar. Die while- Schleife läuft so lange bis der Wert n =0 ist ! Meine Frage, welchen Wert hat n zu beginn ? und weshlab ist die Ausgabe Ergebnis: 111111111...... so lang ?
-
n ist eine Membervariable.
Diese wird im Konstruktor initialisiert und zwar mit dem Wert von x.
Im Konstruktoraufruf wird die Klasse mit i aus main erzeugt.BTW: Der Code wurde dir so vorgegeben? Dann hast du es offenbar mit einem Javaner zu tun, in C++ erzeugt man Klassen idR nicht auf dem Heap, sondern auf dem Stack (kein new!).
-
Diese Überlegung hatte ich auch schon.
myClass(int x):n(x) { }Ich denke dieser Teil bedeutet, dass der Konstruktur die n Variable mit dem int x initialisiert, wie du es glaube ich gesagt hast. Aber wird das nun mit -1 initialisiert oder verstehe ich an dieser Stelle etwas falsch ? Weil n ist ja ein unsigned int...
-
Wo hast du diese Codes eigentlich her? Die sind grauenhaft und voller Fehler. Denkbar schlechtes Lehrmaterial!
Zu deinem Problem: Erklär doch mal, wie das mit Klassen, Objekten, Membervariablen und Memberfunktionen so geht.
Was ist eine Klasse?
Was ist ein Objekt?
Was ist eine Membervariable?
Was ist ein Memberfunktion?
Wie verhält sich Membervariable zu Klasse?
Wie verhält sich Membervariable zu Objekt?
Wie verhält sich Memberfunktion zu Klasse?
Wie verhält sich Memberfunktion zu Objekt?
Wie verhält sich Membervariable zu Memberfunktion?(Um zu testen, ob du nicht zu viel Mist aus den Beispielcodes "gelernt" hast:
Hier ist eine Klasse:class foo { int i; public: foo(int new_i): i(new_i) {} };Zeig mal zwei verschiedene Möglichkeiten ein Objekt dieser Klasse zu erzeugen. Welche würdest du nehmen und warum?
)
-
vatan89 schrieb:
Aber wird das nun mit -1 initialisiert oder verstehe ich an dieser Stelle etwas falsch ? Weil n ist ja ein unsigned int...
unsigned wird am Wert UINT_MAX umgebrochen (Mathematisch: Arithmetik modulo UINT_MAX + 1). Das heißt, UINT_MAX + 1 ist wieder 0. UINT_MAX + 2 ist 1. Entsprechend ist -1 UINT_MAX und -2 ist UINT_MAX - 1, -3 ist UINT_MAX -3, usw.
-
was ist eine Klasse?
Ein Bauplan für ein Objekt, welches Methoden und Variablen enthält.
Was ist ein Objekt?
Ein Objekt speicher die Werte und führt die Memberfunktionen einer klasse aus?
Was ist eine Membervariable?
Sind die in der Klasse beschriebenen Variablen. Diese liegen im Zugriffsbereich der jeweiligen Klasse und können von Objekten genutzt werden .
Was ist ein Memberfunktion?
In der Klasse beschriebenen Methoden. Selbige gilt wie bei den Variablen, also können von Objekten der Klasse genutzt werden. Meist im public deklariert.
Wie verhält sich Membervariable zu Klasse?
Emm nun ja die Membervariable einer Klasse kann halt aufgerufen, mit dem Klassenobjekt gespeichert und verändert werden. Zudem kann man über eine andere Klasse auf diese Membervariable zugreifen.
Wie verhält sich Membervariable zu Objekt?
wüsste jetzt nicht auf Anhieb, was ich anders schreiben sollte als bei der Frage davor.
Wie verhält sich Memberfunktion zu Klasse?
Memberfunktion einer Klasse kann aufgerufen werden und die Membervariablen nutzen um Methoden durchzuführen ?
Wie verhält sich Memberfunktion zu Objekt?
Das Objekt der Klasse speichert die Ergebnisse der Memberfunktion ?
class foo { int i; public: foo(int new_i): i(new_i) {} };Eine furchtbare Klasse. Ich würde es ganz standardgemäß
foo myfoo (new_i);oder
foo *ptri; ptri= i;Oh Gott hab ich jetz viel Mist dahingeschrieben :S. So unwahrscheinlich es ist, dass meine beiden vorschläge richtig sind, würde ich wohl den zweiten wählen, weil dieser logischer aussieht :S
-
Diese Aufgabe hatte S.lukas auch erst. Ich dachte S.lukas ist nun s.sebastian. vatan89 ist nun auch S.lukas. Alle guten Dinge sind 3. 
Wo nimmst du eigentlich nur diese Aufgaben her. Meinst du, aus schlechten Aufgaben lernst du etwas Gutes? Oder sind das echt Aufgaben, die dir dein Lehrer gegeben hat, also alte Klausuraufgaben? Das kann ich gar nicht glauben.
-
ja, unser Prof scheint entweder kein Interesse zu haben oder macht sowas mit Absicht !
Könnt mir jemand vllt. ganz kur varraten was dieser Operator macht. Ich hab im netz geguckt aber nicht verstanden.
double a; if (a & 1)....bitweise verknüpfung was ist das =
-
Er nimmt die Binärdarstellung von a und die Binärdarstellung von 1 (das ist 00000...0001) und verknüpft sie Stelle für Stelle mit UND. BTW ich kann mich irren, aber mit double dürfte das eigentlich nicht funktionieren. Also mal angenommen, a ist ein int, dann ist der Ausdruck 1, falls das niedrigste Bit von a 1 ist, sonst 0. Das niedrigste Bit hat die Wertigkeit 1, der ganze Ausdruck ist also nichts anderes als eine Abfrage, ob a ungerade ist. Genauer: a & 1 == a % 2. Verallgemeinert
-
wow cool danke, aufjedenfall gut zu wissen
-
vatan89 schrieb:
Was ist eine Membervariable?
Sind die in der Klasse beschriebenen Variablen. Diese liegen im Zugriffsbereich der jeweiligen Klasse und können von Objekten genutzt werden .
Das klingt etwas ungenau. Jedes Objekt hat seine eigene Instanz seiner Membervariablen. Die gehören nur ihm, da kann nur das Objekt selber dran (außer es gewährt jemandem Zugriff da drauf)
Was ist ein Memberfunktion?
[...] Meist im public deklariert.
Naja.
Wie verhält sich Membervariable zu Klasse?
Emm nun ja die Membervariable einer Klasse kann halt aufgerufen, mit dem Klassenobjekt gespeichert und verändert werden. Zudem kann man über eine andere Klasse auf diese Membervariable zugreifen.
Nein, eben nicht. Die Klasse beschreibt zwar wie die Objekte aussehen, die Klasse ist aber nur ein Bauplan, die kann selber gar nicht handeln (außer über static-Kram).
Wie verhält sich Membervariable zu Objekt?
wüsste jetzt nicht auf Anhieb, was ich anders schreiben sollte als bei der Frage davor.
So wie bei der Frage davor, aber beim Objekt passt es.
Wie verhält sich Memberfunktion zu Klasse?
Memberfunktion einer Klasse kann aufgerufen werden und die Membervariablen nutzen um Methoden durchzuführen ?
Genau. Es die Funktion wird für ein Objekt aufgerufen und kann dann Membervariablen dieses Objekts benutzen. Dies ist wohl die entscheidendste Eigenschaft, wenn du deinen Code verstehen möchtest.
Wie verhält sich Memberfunktion zu Objekt?
Das Objekt der Klasse speichert die Ergebnisse der Memberfunktion ?
Nein, überhaupt nicht. Siehe vorherige Antwort. Die Memberfunktion kann aber, sofern sie nicht const ist, Membervariablen des Objekts verändern.
class foo { int i; public: foo(int new_i): i(new_i) {} };Eine furchtbare Klasse.
Wie kommst du zu dieser Einschätzung?
Ich würde es ganz standardgemäß
foo myfoo (new_i);Ja, gute Methode
.oder
foo *ptri; ptri= i;Oha! Völliger Unsinn³.
Oh Gott hab ich jetz viel Mist dahingeschrieben :S.
Das meiste war ok, aber das letzte absolut nicht! Ich hätte jetzt noch irgendwas mit new erwartet und dann gehoffst, dass du auch die erste Methode wählst.
So unwahrscheinlich es ist, dass meine beiden vorschläge richtig sind, würde ich wohl den zweiten wählen, weil dieser logischer aussieht :S
Nein. Erst ptri als Pointer auf foo und dann dem Pointer einen int zuweisen? Nein, wirklich nicht.