PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welche Methoden werden im Header implementiert?



miracoli
23-05-2007, 13:13
Hi!

Ich hab seit kurzem angefangen mich mit c++ auseinanderzusetzen, und hab natürlich auch gleich ein paar Fragen an euch.

Welche Methoden einer Klassendeklaration werden im Header implementiert und welche nicht? Ist eine Methode im Header automatisch als inline deklariert?

Vielen Dank für eure Antworten auf meine noob Fragen. :-)

MfG

locus vivendi
23-05-2007, 13:43
Welche Methoden werden im Header implementiert und welche nicht?
Das kann ich nicht erschöpfend beantworten. Soviel sei gesagt: Du kannst dir im Prinzip aussuchen welche Funktionen du im Header definierst. Dabei solltest du beachten, dass mehr Code in Headern gewöhnlich die Zeit die zum Kompilieren gebraucht wird erhöht, denn der Code muss ja jedesmal vom Compiler analysiert werden, wenn der Header benutzt wird. Außerdem führt das Definieren von Funktionen in Headern tendenziell dazu, dass Benutzer des Headers abhängiger von Implementierungsdetails werden (Beispiel: Eine Funktion benutzt intern eine Schnittstelle zum Dateisystem. Wird diese Funktion in einem Header implementiert, dann sehen Benutzer des Headers auch diese Schnittstelle).
Wenn die Definition im Header ist, dann sieht natürlich auch der optimierende Teil des Compilers jedesmal die Funktion und kann unter Umständen daraufhin optimieren.


Ist eine Methode im Header automatisch als inline deklariert?
Nein. Aber eine Methode die du in der Klassendefinition definierst ist automatisch inline.

Yonibear
23-05-2007, 21:06
Allerdings wirst du mit einer Header-Funktion, die nicht inline ist schnell Probleme bekommen.
Jede Datei die den Header verwendet, bindet nämlich den Header ein als ob du die Funktion in die Datei kopiert hättest.
Wenn die Header-Funktion dann nicht inline ist oder zufällig aus einem anderen Namespace heraus eingebunden wir, wird die Funktion mehrfach definiert und es gibt einen Linkerfehler.

miracoli
23-05-2007, 21:41
Danke für die Antworten! Wie haltet ihr es persönlich mit dem Header? Implementiert ihr überhaupt eine Funktion im Header?

MfG

peschmae
23-05-2007, 23:25
Ich mache das ausschliesslich für simple get- und set-Funktionen (d.h. solange die wirklich *nur* set/get sind).

MfG Peschmä