Jede Klasse in eigene h-Datei?
-
abgelitten

-
Ok, ich hau alles in getrennte Files. Sieht nach mehr Arbeit aus
und ist einfach übersichtlicher.
-
asc schrieb:
In der Regel kenne ich aus Projekten eher den Ansatz:
Eine Klasse eine Datei, als mehrere Klassen in einer Datei. Wobei man hier auch differenziert betrachten muss, so können logisch direkt abhängige, kleine Klassen durchaus auch in einem Header zu finden sein (z.B. ein Container und seine Elemente, wobei ich dabei meist ohnehin verschachtelte Klassen verwende).
So halte ich das auch.
Wenn eine Klasse ohne die andere keinen Sinn macht, respektive nicht funktionieren kann, dann können die gut in der selbsen Datei stehen. Sofern man sie nicht aus Platz/Übersichtlichkeitsgründen doch trennen muss.
-
FrAnKeY schrieb:
Ok, ich hau alles in getrennte Files. Sieht nach mehr Arbeit aus
und ist einfach übersichtlicher.Ich kann dir zumindest sagen das die Alternative echt be******** ist. In dem aktuellen Projekt stehen teilweise 50 Klassen in einer Datei, und für jemanden dem sich teilweise die Untergliederung nicht erklärt (und dies nach mehr als einem Jahr im Projekt) bedeutet dies zudem jedesmal eine Suche.
Ich trenne zudem noch mittels Namensräumen, und jeder Namensraum (in der Regel bei mir max. 3 Verschachtelungstiefen) wird auch über die Verzeichnisstruktur abgebildet.
-
Also ich will jetzt nicht 50 Klassen in einer Header rechtfertigen: aber habt ihr keine gescheiten tools, die einem dabei helfen, Klassen zu finden. in VisualAssist X gibts so ne nette Funktion "Objekt Browser". Da tippel ich die Anfangsbuchstaben ein, bekomme eine Liste aller relevanten Klassen und kann mich dann zu der Stelle in der Datei springen lassen.
-
Artchi schrieb:
Also ich will jetzt nicht 50 Klassen in einer Header rechtfertigen: aber habt ihr keine gescheiten tools, die einem dabei helfen, Klassen zu finden. in VisualAssist X gibts so ne nette Funktion "Objekt Browser". Da tippel ich die Anfangsbuchstaben ein, bekomme eine Liste aller relevanten Klassen und kann mich dann zu der Stelle in der Datei springen lassen.
Brauche ich nicht, weil ich eine Datei pro Klasse nehme. Aber wenn ich mal eine Klasse verschludert hätte, reichte es,
- den Klassennamen irgewndwo im Code einzutippem und darauf
- Rechtsklick/Springe zu Deklaration auszuwählen.
-
volkard schrieb:
Artchi schrieb:
Also ich will jetzt nicht 50 Klassen in einer Header rechtfertigen: aber habt ihr keine gescheiten tools, die einem dabei helfen, Klassen zu finden. in VisualAssist X gibts so ne nette Funktion "Objekt Browser". Da tippel ich die Anfangsbuchstaben ein, bekomme eine Liste aller relevanten Klassen und kann mich dann zu der Stelle in der Datei springen lassen.
Brauche ich nicht, weil ich eine Datei pro Klasse nehme. Aber wenn ich mal eine Klasse verschludert hätte, reichte es,
- den Klassennamen irgewndwo im Code einzutippem und darauf
- Rechtsklick/Springe zu Deklaration auszuwählen.Exakt selbiges tu ich auch

Eine Klasse pro Header. Ohne Ausnahme. Wobei ich die Ausnahme die asc erwähnt hat, durchaus nachvollziehen kann. Ich praktiziere es dennoch nicht

-
Artchi schrieb:
Also ich will jetzt nicht 50 Klassen in einer Header rechtfertigen: aber habt ihr keine gescheiten tools, die einem dabei helfen, Klassen zu finden. in VisualAssist X...
Tools? VisualAssistX mag zwar gut sein, läuft aber leider nicht mit unserer IDE (und ich kenne kein sinnvolles Plugin für den C++ Builder). Und ja, suchen kann man zwar mit nahezu allen Produkten, doch ideal ist es dennoch nicht.
-
Im Normalfall bekommt jede eigenständige Klasse bei mir auch einen eigenen Header. Ausnahmen sind:
- Dummyklassen, z.B. für Unittests
- Output von Codegeneratoren bündelt manchmal mehrere Klassen in einen Header
- Wenn eine Klasse eng von einer anderen abhängig ist und nur mit ihr zusammen benutzt wird. Beispiel:
Ich hab hier eine Klassenhierarchie von Webservices, die alle eine Process()-Methode gemeinsam haben. Die Methode bekommt je einen Basisklassenpointer auf eine Input- und eine Output-Klasse mit. Die Webservice-Klassen selber wissen welche abgeleiteten Typen die übergebenen Input- und Ouput-Typen haben. Die Input/Outut-Typen werden in fast allen Fällen generiert. In einem Fall hab ich eine Ouput-Klasse manuell schreiben müssen, weil sie mit den generierte eigentlich garnichts zu tun hat, es ist einfach nur die enizige Möglichkeit, aus dem Webservice Infos zurückzubekommen. Diese Klasse hab ich im gleichen Header wie den Webservice definiert.Was die Tools zum Finden von Klassen angeht: IDEs die garkeine Möglichkeiten in der Richtung haben sterben allmählich aus, und Tools die einen Entwickler in der Hinsicht unterstützen sind überall zu bekommen in mannigfaltigen Ausführungen. Ein Entwicklertoolset (muss nichts vorgefertigtes sein, ich mein einfach damit die Menge der Programme, die einem Entwickler zur Verfügung stehen und die häufig benutzt werden), das soetwas nicht beinhaltet ist in der heutigen Zeit ganz einfach nurnoch als unvollständig zu bezeichnen.
Im Notfall tuts immernoch das gute alte grep über die Sourcecode-Verzeichnisse.
-
Im Notfall tuts immernoch das gute alte grep über die Sourcecode-Verzeichnisse.Und das gibts sogar schon für Windows ^^