(C ++) Ganze Klasse in .h-Datei?

8

Wenn ich eine Klasse mit kleinen Funktionen erstelle, die nicht viel bewirken, ist es akzeptabel, sie alle in die Header-Datei zu schreiben? Für eine bestimmte Klasse ist es nur die .h-Datei, die keine .cpp-Datei enthält.

    
graydragon10 28.09.2010, 07:11
quelle

5 Antworten

6

Ja, das ist akzeptabel. Es wird sicherlich kompilieren. Aber auch, wenn es die Codeorganisation sauberer macht, dann kann das gut sein. Die meisten Vorlagendefinitionen sind aus der Notwendigkeit heraus bereits so, dass Sie nichts Unerhörtes tun. Es kann jedoch einige Nachteile dieser Klasse geben, die sich auf andere Klassen stützt. Wenn Sie die gesamte Definition in andere Dateien einschließen müssen, die die Klasse verwenden, kann dies zusätzliche Kompilierungszeit erfordern, als wenn Sie nur eine kurze Klassendeklaration haben.

Sie können Ihre Übersetzungszeiten messen, wenn dies ein echtes Problem zu sein scheint.

Wenn Sie eine Kopie erhalten können, Die C ++ Programmiersprache (und viele andere Bücher) haben einen detaillierten Abschnitt über die Quellcodeorganisation und die spezifischen Vorteile des Trennens von Code in .h- und .cpp-Dateien.

    
JoshD 28.09.2010, 07:15
quelle
3

Es hängt davon ab, was Sie anstreben.

Für ein Haustier-Projekt ist es akzeptabel, aber dann ist alles wirklich.

Für ein echtes Projekt müssen Sie sich eine Reihe von Fragen stellen:

  • haben Sie wenige Abhängigkeiten? (Ja)
  • wird sich Ihre Logik / Implementierung wahrscheinlich oft ändern? (Nein, oder nächste Frage)
  • Wie viel hängt von dieser Klasse ab? (nicht viel oder viel, aber es wird sich nicht ändern)

Wenn die Antworten Sie zufriedenstellen, dann gehen Sie weiter.

Es ist hauptsächlich eine Frage des Abhängigkeitsmanagements. Wenn Sie die Methodendefinition in den Header setzen, werden sie wahrscheinlich vom Compiler inline gesetzt, was bedeutet, dass Sie bei jeder Änderung alles neu kompilieren müssen, was von dieser Klasse abhängt.

Templates tun dies, allerdings haben Templates im Allgemeinen nur wenige Abhängigkeiten (andere Includes) und Sie sind relativ gezwungen, so zu verfahren (obwohl Sie external nicht Template-abhängigen Code verwenden können, um Abhängigkeiten zu reduzieren).

Für wirklich große Projekte, bei denen das Dependency Management im Vordergrund steht, würde ich davon abraten. In diesen Projekten sind eine stabile ABI und die Fähigkeit, binärkompatible Änderungen zu fördern, lebensrettend im Falle eines Problems und sie sind die "leichte" Unannehmlichkeit für den Entwickler wert.

Bitte definieren Sie auf keinen Fall die Methoden in der Klasse. Auch inline können Sie diese nach der Klassendeklaration definieren. Dies erleichtert es den Lesern (selbst in ein paar Monaten), die Oberfläche schnell zu verstehen.

    
Matthieu M. 28.09.2010 07:27
quelle
2

Ja, es ist akzeptabel. Wenn Sie Vorlagen erstellen und keinen Compiler mit export support haben, haben Sie keine Wahl.

Beachten Sie jedoch, dass dadurch die Abhängigkeiten erhöht werden können und die Kompilierung dadurch langsamer wird.

    
ybungalobill 28.09.2010 07:15
quelle
2

Es wäre in Ordnung, wenn Sie diese Header-Datei in Ihren zukünftigen Codes oder Projekten verwenden und wenn Sie sie mit den anderen teilen möchten.

    
Ruel 28.09.2010 07:16
quelle
0

Hängt davon ab, wie Sie verlinken. Um zu vermeiden, dass Nachrichten wie die Neudefinition von Blah angezeigt werden müssen, wird in der vorherigen Definition in der Datei blah.h in Zeile 13 alles außer der Deklaration in eine .cpp.

geschrieben     
Novikov 28.09.2010 07:16
quelle

Tags und Links