Hallo Forum,
mal eine Frage an Leute, die bereits große C++ Projekte realisiert haben. Wie bindet Ihr Eure includes ein. Einfaches Beispiel:
Wenn ich objektorientiert mit Vererbung programmiere, werden ja die includes der Basisklasse auch an die abgeleiteten Klassen vererbt. Includes der Basisklassen sind also überflüssig. Doch auch wenn ich nur in Basisklassen includes einbinde, finde ich das unübersichtlich, dass includes über das gesamte Modul verteilt sind.
Wie macht Ihr das? Funktioniert es, wenn man im globalen Geltungsbereich (in main.h) alle benötigten Includes einbindet?
Includes kommen genau dort hin, wo sie gebraucht werden. Anders geht das wohl auch kaum. Und bloß keine globale Includedatei mit allen benötigten Includes, da wäre ja der ganze Sinn der Modularität hinfällig.
Ansonsten verstehe ich nicht genau was du meinst, dein Beitrag ist ein bisschen...wirr.
Zuletzt bearbeitet von SeppJ am 15:45:17 02.09.2010, insgesamt 1-mal bearbeitet
Ehrlich gesagt verstehe ich kein Stück, was Du meinst.
Includes werden gar nicht vererbt. Includes sorgen für simple Textersetzung. Da, wo Du etwas einbindest, steht der komplette Text der eingebundenen Datei, und zwar an genau der Stelle, wo die Datei eigebunden wird.
Beispiel:
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//a.h
class A
{
int a;
int b;
};
//b.h
#include "a.h"
class B
{
};
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//a.h
class A
{
int a;
int b;
};
//b.h
#include "a.h"
class B
{
};
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//a.h
class A
{
int a;
int b;
};
//b.h
#include "a.h"
class B
{
};
Daraus wird durch den Präprozessor:
C/C++ Code:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
class A
{
int a;
int b;
};
class B
{
};
C/C++ Code:
1 2 3 4 5 6 7 8 9
class A
{
int a;
int b;
};
class B
{
};
C/C++ Code:
1 2 3 4 5 6 7 8 9
class A
{
int a;
int b;
};
class B
{
};
Vererbung ist da erstmal nicht im Spiel und hat auch mit Includes nichts zu tun.
Damit Du aber von einer Klasse erben kannst, muss diese vollständig bekannt sein. Eine Vorwärtsdeklaration reicht nicht.
_________________ タキオン
Zuletzt bearbeitet von Tachyon am 15:50:17 02.09.2010, insgesamt 1-mal bearbeitet
Das hat nichts mit Übersichtlichkeit zu tun. Du inkludierst so wenig, wie möglich, aber so viel, wie nötig.
Abhängigkeiten kannst du verhindern, indem du dir Gedanken machst ob überall Definitionen von Klassen gebraucht werden oder ob Deklarationen reichen. Siehe dazu z.B hier.
Das heisst konkret:
Mach mal alle includes weg.
Dort, wo du lediglich den Namen einer Klasse brauchst machst du eine Vorwärtsdeklaration der Klasse.
Dort, wo du die Definition brauchst bindest du den entsprechenden Header ein.
Das sind die optimalen includes, wie sie sein sollten.
Es kann zwar sein, dass so die gleiche Headerdatei mehrmals auf einem Pfad inkludiert wird, aber dafür hast du Headerguards.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.