Objekt ist erzeugt. Wird außer Attributen auch Speicherplatz für Methoden reserviert???
-
Hallo an alle,
ich habe hier eine Klasse:
class Mitarbeiter
{
string Name;public:
void setName(string name)
{
Name = name;
}
};//Dann erzeuge ich ein Objekt von der Klasse Mitarbeiter.
Mitarbeiter m1;
Wie ich weiß, es wird im Speicher nach der Erzeugung des Objektes
ein Speicher reserviert.Meine Frage ist: Wird auch ein Speicher für die Methode setName(..) auch reserviert,
oder kommt setName(..) im Speicher nur einmal vor???Vielen Dank im Voraus
Slawik
-
setName() kommt nur einmal in der Klasse vor - wenn du sie aufruft, erhält sie einen zusätzlichen Parameter "this", der auf das verwendete Objekt zeigt.
(allerdings mußt du beachten, daß bei virtuellen Methoden noch ein Zeiger auf die vtable im Objekt gespeichert wird)
-
Habe ich richtig verstanden?
Wenn Objekt von einer Klasse erzeugt wird, dann wird im Speicher nur Speicherplatz für Attributen erstellt, nicht aber für Methoden?
-
Die Methoden belegen immer Speicherplatz, nämlich den des Codes, und das von Programmstart an. Wieso sollte ich identischen Code für jedes neue Objekt neu kopieren?
-
Genau - ist ja schließlich nicht notwendig, zig-mal den identischen Maschinencode im Speicher zu verteilen.
und intern verarbeitet der Compiler die Methoden sowieso in "normale" Funktionen:
void Mitarbeiter_SetName(string name,Mitarbeiter* this);
-
Vielen Dank!
