Objekt-Id



  • Ich habe eine Klasse definiert und erstelle im Verlauf des Programms immer wieder Objekte. Eine Membervariable ist

    int ClassID
    

    Ich möchte jetzt, dass jedesmal wenn ich ein Objekt erzeuge hier eine ID vergeben wird, am besten am Anfang eine 1 und dann immer so weiter. Ich vermute man muss hier irgendwie

    const int ClassID
    

    definieren und dann im Konstruktor einen Wert zuweisen. Mir ist aber nicht klar, wie dieser Wert dann bei jeder Erzeugung größer wird. Ich habe einen ziemlichen Knoten im Kopf.

    Danke

    Grüße
    Mathias



  • so könntest du es machen:

    class Test
    {
    public:
    	Test()
    	{
    		++id;
    	}
    
    private:
    	static int id;
    };
    
    int Test::id = 0;
    

    greetz KN4CK3R



  • class foo
    {
        int id; // id der klasse
    public:
        static int id_counter; 
    
        foo()
        {
            id = id_counter++;
        }
    };
    
    int foo::id_counter = 0;
    

    so kann man es machen

    Edit: zu spät 😃



  • Ich glaube dazu muss man wenig erklären:

    class Counter
    {
    private:
      static int count;
    public:
      int ID;
      Counter()
      {
        ID = count;
        count++;
      }
    };
    
    int Counter::count = 0;
    


  • wieso heißt die objekt-id bei dir ClassId? 😃



  • KN4CK3R schrieb:

    class Test
    {
    public:
    	Test()
    	{
    		++id;
    	}
    	
    private:
    	static int id;
    };
    
    int Test::id = 0;
    

    So kann man es leider nicht machen, da bei dieser Lösung alle Instanzen der Klasse Test die gleiche id hätten. Sie würde sich beim erzeugen einer Instanz immer (für alle) erhöhen. Aber das Prinzip für den Zähler ist richtig.



  • mootex schrieb:

    wieso heißt die objekt-id bei dir ClassId? 😃

    Aufgrund von Unerfahrenheit 😃 ... Ja nee, is klar, muss natürlich so heißen



  • Was willst du mit der ID überhaupt machen?

    Ist dir bewusst, dass du Kopien und Zuweisung speziell behandeln oder verbieten musst, falls die IDs eindeutig bleiben sollen?



  • Encypruon schrieb:

    So kann man es leider nicht machen, da bei dieser Lösung alle Instanzen der Klasse Test die gleiche id hätten. Sie würde sich beim erzeugen einer Instanz immer (für alle) erhöhen. Aber das Prinzip für den Zähler ist richtig.

    stimmt, hab die Zuweisung zu was anderem vergessen. Aber allgemein fehlt ja sowieso noch die Implementierung von operator=, Copy Konstruktor, ...

    greetz KN4CK3R


Anmelden zum Antworten