Codeerklärung(Klasse)
-
Hi, ich hab leichte Probleme dabei das mit den Klassen zu verstehen.
Ich hab hier folgenden Code :#include <iostream> using namespace std; class CDummy { public: static int n; CDummy () { n++; }; ~CDummy () { n--; }; }; int CDummy::n=0; int main () { CDummy a; CDummy b[5]; CDummy * c = new CDummy; cout << a.n << endl; delete c; cout << b[1].n; cout << CDummy::n << endl; return 0; }1.Also soweit ich das verstanden habe, ist
static int n;wie eine globale Variable zu handhaben, die hier :
int CDummy::n=0;initialisiert wird.
2.Das hier :
CDummy () { n++; };müsste doch der Konstruktor sein, oder ? Aber eigentlich sieht das eher aus wie eine Funktion ! Aber eigentlich muss das der Konstruktor sein, da hier :
~CDummy () { n--; };ja der Destruktor folgt. ( erkennt man ja an dem "~")
3.Was dann in der main passiert blick ich gar nicht mehr.
Warum bekomme ich als Ausgabe 7 und 66 ?
Kann mir das jemand erklären ?
-
das nennt man Instanz-Counter.
n ist die Anzahl der Instanzen, welche zur Zeit erzeugt sind.7 instanzen sinds,
dann wird eine mit delete[] gelöscht
6 sinds dann noch.66, weil du nach der ersten ausgabe kein endl hast...
ganz einfach eigentlich...
-
toxor schrieb:
1.Also soweit ich das verstanden habe, ist
static int n;wie eine globale Variable zu handhaben, die hier :
int CDummy::n=0;initialisiert wird.
Naja... so mehr oder weniger. Es ist so, dass jede Instanz der Klasse ein un die selbe Variable n "enthalten".
toxor schrieb:
2.Das hier :
CDummy () { n++; };müsste doch der Konstruktor sein, oder ? Aber eigentlich sieht das eher aus wie eine Funktion ! Aber eigentlich muss das der Konstruktor sein, da hier :
~CDummy () { n--; };ja der Destruktor folgt. ( erkennt man ja an dem "~")
Ähm, der Konstruktor ist immer eine Funktion (genauer: Methode der Klasse)...
toxor schrieb:
3.Was dann in der main passiert blick ich gar nicht mehr.
Warum bekomme ich als Ausgabe 7 und 66 ?
Kann mir das jemand erklären ?Es wird 7 und zweimal 6 ausgegeben.
Es wird erst eine Instanz (a) angelegt, daher wird n=1.
Dann werden 5 Instanzen (b[5]) angelegt, daher wird n=1+5=6.
Dann wird noch eine Instanz angelegt (c), also n=6+1=7.
Das wird ausgegeben. Dann wird c wieder gelöscht und n=7-1=6.
Dieses n wird dann zweimal ausgegeben. Einmal über b (ohne Zeilenumbruch...) und einmal direkt über die Klasse.
-
vielen Dank für die Antworten, ich denke das hat mir weiter geholfen