Archiv verlassen und diese Seite im Standarddesign anzeigen : von Java nach C++
Hi @all
ich habe mich nun sehr lange mit Java beschäftigt und denke, ich kann behaupten OOP zu beherrschen.
Jetzt versuche ich mich an C++ und arbeite ein Buch (Andre' Willms, C++, Addison-Wesley) durch. Ich begann wie unter Java und erstellte mir meine ersten .cpp Dateien. Nach Java stellt dies nun alles kein Problem da (auf jeden Fall nicht in den Anfängen).
Ein Bekannter meinte nun zu mir, ich sollte mit header-files arbeiten. Ich Habe soviel herausgefunden, dass man dort die Funktionen / Klassen definiert und sie im C-File ausprogrammiert?
Nun ja, wie wende ich es nun an? Ich wollte mir dazu eigentlich kein neues Buch kaufen, denn dieses ist ja nun schon teuer genug.
Hat jemand vielleicht eine kleine Hilfe (Webside, etc, ...), damit ich damit unter Linux arbeiten kann.
Oder meint ihr, dass so etwas am Anfang von C++ noch nicht nöig ist? Obwohl ich sagen muß, dass ich die Grundbausteine nun beherrsche...
Wenn se ne Meinung haben, da poste se doch wat...
Sym
anda_skoa
05-09-2002, 22:26
Es ist nicht nötig, du kannst auch alles in einem File machen.
Theoretisch auch alle Klassen in einem File.
Die header trennen die Deklaration von der Definition/Implementation.
Das ist wichtig beim kompilieren.
Wenn sich eine Datei ändert, müssen die Dateien, die davon abhängen neu kompiliert werden.
Wenn aber zB die Methodensiganturen alle gleich bleiben und sich nur die Implementation der Methoden ändert, muß nur das eine cpp File neu kompiliert werden.
Beispiel
// c1.h
class C1
{
public:
C1();
~C1();
};
// c1.cpp
C1::C1()
{
}
C1::~C1()
{
}
// main.cpp
#include "c1.h"
int main()
{
C1 c;
return 0;
}
Wenn sich c1.h ändert, muß main.cpp und c1.cpp neu kompiliert werden.
Wenn c1.h gleich bleibt und sich nur c1.cpp ändert, muß nur c1.cpp neu kompiliert werden.
Bei vielen Dateien und komplexen Anhängigkeiten wird das dann entscheidend.
Ciao,
_
Wofür sind header-files denn überhaupt sinnvoll. Nur um die kompilierungszeit zu verkürzen? Da können sich dann doch auch viele Fehler einschleichen!
Wenn ich das dann so mache, wie kompiliere ich das ganze denn unter linux? jeden einzelnen file? Am besten ein make-file anlegen, wie?
thx für die antwort
Sym
peschmae
06-09-2002, 07:34
Frage 1 wurde schon beantwortet:
Bei vielen Dateien und komplexen Anhängigkeiten wird das dann entscheidend. Wer will schon n riesen programm in einer datei programmieren, das wird rasch extrem unübersichtlich
Wird das Projekt grösser als eine Datei, solltest du schon ein Makefile anlegen (oder Compilercache und ein shellscript verwenden)...
Entweder du schreibst das Makefile händisch, was bei grossen Projekten ziemlich schnell ziemlich grässlich wird, oder du verwendest Automake, da aber m.E. recht schwer zu verstehen und bedienen ist
Es gibt auch make - alternativen wie Cons (in Perl) und eine Python version davon
Zum C++ verstehen geeignet sind M.E. Thinking in C++ 1/2 vom guten alten www.bruceeckel.com
MfG Peschmä
anda_skoa
06-09-2002, 09:52
Original geschrieben von Sym
Wofür sind header-files denn überhaupt sinnvoll. Nur um die kompilierungszeit zu verkürzen? Da können sich dann doch auch viele Fehler einschleichen!
Im Normalfall hat man für jede Klasse eine header Datei und eine Source Datei.
Wenn Klassen nur ganz lokal benutzt werden, kann man sie auch zusammen fassen.
Im Header steht das Interface einer Klasse, im Source die Implementierung.
Das ist ansich ein Prinzip der OOP, Trennung von Schnittstelle und Implementation.
Wenn du eine Klasse in einer anderen Datei benutzen willst, muß man dem Compiler mitteilen, wie diese Klasse aussieht.
Darum wird der header der Klasse mit einem #include Befehl eingebunden.
Du brauchst also nur die header um zu kompilieren. Die Klasse kann schon in binärer Form, zB als Bibliothek, vorliegen, die Sourcedateien sind für alle anderen Klassen oder Programmteile irelevant
Wenn ich das dann so mache, wie kompiliere ich das ganze denn unter linux? jeden einzelnen file? Am besten ein make-file anlegen, wie?
Ein Programm wird immer in zwei Phasen erzeugt.
Zuerst werden die Sourcen kompiliert und anschliessend wird gelinkt.
Ein Makefile besteht darum in den meisten Fällen aus einem Linker Target und mehreren Compile Targets.
Es sollte in diesem Forum schon eine kurze Einführung in Makefiles geben.
Für größere Projekte bietet es sich an, ein autoconf/automake Framework zu verwenden.
Wie peschmae schon geschrieben hat, ist das am Anfang nicht so einfach zu verstehen.
Aber IDEs wie zB KDevelop machen das für dich.
Ciao,
_
peschmae
06-09-2002, 10:52
evtl würd ichs auch mit trolltechs qmake versuchen, da must du fast nichts können und es scheint zu laufen
Das Problem bei den IDEs ist einfach, dass einem dann die Kontrolle fehlt (und oft auch das Wissen um bei fehlern einzugreifen)
MfG Peschmä
Vielen Dank für die ganzen Antworten. Ich muß sagen:
Gehen sie in dieses Forum, da wird ihnen geholfen:p
Ich werde mich dann mal daran versuchen...
Sym
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.