Zähler für Objekte

Ich habe Folgende Klasse:
Code:
#include "konto.h"

#include <iostream>

using namespace std;







static int zaehler = 0;




konto::konto(float kontostandNeu, float linieNeu)

{

   kontostand = kontostandNeu;

   linie = linieNeu;

   zaehler++;

}




void konto:: kontostandANzeigen() {

    cout << "Kontostand: " << kontostand << endl;

}




void konto:: einzahlen(float menge) {

    kontostand += menge;

}




void konto:: auszahlen(float menge) {

    if(kontostand-menge > linie){

    kontostand -= menge;

    }

    else

    {

        cout << "Konto waere zu niedrig!" << endl;

    }

}
Dazu folgende header:
Code:
#ifndef KONTO_H

#define KONTO_H













        class konto {







        public:




            konto();

            konto(float kontostandNeu = 0, float linieNeu = 0);




          /*  void kontoInitialisieren() {            ersetzt durch Konstruktor!!

                kontostand = 0;

                linie = -100;

            }    */




            int getZaehler();




            void kontostandANzeigen();




            void einzahlen(float menge);




            void auszahlen(float menge);







        private:

            float kontostand;

            float linie;




        };




#endif // KONTO_H



int konto :: getZaehler(){

    return zaehler;

}
Und folgende Main
Code:
#include <iostream>

#include "konto.h"




using namespace std;






















int main()

{




    konto konto1(100.0, 0.0);

    konto k2(20.0);

    konto k3(30.0);

    konto k4(40.0);

   cout << k2.getZaehler() << endl;
cout << k3.getZaehler() << endl;
cout << k4.getZaehler() << endl;

return 0;
}
Der Zaehler sollte eigentlich die Nummer des erstellten Objekts haben, sodass bei der Ausgabe k2.getZaehler() eine 2, bei k3 eine 3 usw ausgegeben werden.
Jedoch wird hier z.B. immer 4 ausgegeben...
Weis jeand zufällig wieso das so ist bzw. wie ich das ändern könnte?
 

cwriter

Erfahrenes Mitglied
Weis jeand zufällig wieso das so ist bzw. wie ich das ändern könnte?
Dein Zähler ist eine statische Variable. D.h. ein Speicherort für sämtliche Klasseninstanzen.
C++:
konto konto1(100.0, 0.0);
// Zähler ist 1
konto k2(20.0);
// Zähler ist 2
konto k3(30.0);
// Zähler ist 3
konto k4(40.0);
// Zähler ist 4
Wenn du nun den Zähler abfragst, ist die Variable natürlich immer 4 - ist ja ein einzelner Wert.

Du willst eine Kopie machen:

C++:
konto::konto(float kontostandNeu, float linieNeu)
{
   kontostand = kontostandNeu;
   linie = linieNeu;
   this->m_zaehler = zaehler++;
}

int konto::getZaehler(){
    return m_zaehler;
}


// Entsprechend anzupassen:
 private:
            float kontostand;
            float linie;
            int m_zaehler;

Gruss
cwriter