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


Anmelden zum Antworten