Erzeigen einer Instanz einer Klasse - Wird jedes mal eine neue Memberfunktion erstellt?



  • Meine Frage:

    Wenn ich eine Instanz einer Klasse erzeige, zB für ein Spiel. Dort gibt es, sagen wir mal ein Schiff. Das kann einladen, ausladen, schießen und was weiß ich nicht... Wenn ich jetzt 20 oder 30 Objekte davon erzeuge, was ja durchaus möglich ist, wenn der Spieler diese Schiffe baut, wird dann für jedes Objekt eine neue Funcktion erzeug? Oder wird jede Funktion nur einmal erzeugt und dann immer wiederverwendet? Jede Klasse hat ja normalerweise Memberfunktionen (zB player.setCoordinates()). Wird diese nur einmal erzeugt oder für jede Klasse einzeln?

    Schonmal Danke für eure Antworten.


  • Mod

    Nein. Es gibt genau eine Funktion für alle Instanzen der Klasse. Wenn die Memberfunktionen aufgerufen werden bekommen sie noch einen versteckten Parameter übergeben: Den this-Zeiger, ein Zeiger auf die aufrufende Instanz. Dieser wird (wiederum versteckt) allen Membervariablenzugriffen in der Funktion vorangestellt.

    Das sieht dann quasi so aus (falls du die Sprache Python kennst, könnte dir dies bekannt vorkommen):

    class Foo
    {
     int member;
    public:
     void bar()
      {
        member=1;
      }
    };
    
    // ...
    
    Foo x;
    x.bar();
    
    // Das obige entspricht effektiv (bis auf Kleinigkeiten) dem hier:
    class Foo
    {
     int member;
     friend void bar(Foo*);
    };
    
    void bar(Foo *this)
    {
     this->member=1;
    }
    
    // ...
    
    Foo x;
    bar(&x);
    


  • Ah, oke, verstanden. Danke ^^


Anmelden zum Antworten