Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » c++ programmieren ohne header

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.07.2007, 19:09 Uhr
Lensflare



Hallo.

kann ich in c++ so programmieren wie in java und c#, also ohne header sondern nur mit .cpp dateien, die Klassen enthalten mit schon auscodierten Methoden?

Ich hab das mit ein paar Klassen ausprobiert und es scheint zu funktionieren. Ich includiere dazu die .cpp dateien.

Aber ich weiss nicht ob das bei komplexeren Sachen weiterhin funktionieren wird.

Wenn man alles ohne header machen kann, dann würde ich das gerne machen, weil mir diese Aufteilung überflüssig erscheint... zumindest bei OpenSource-Projekten.

Ich wähle bewusst c++ und nicht java oder c# aus den beiden Gründen:
- das endprogramm soll möglichst schnell laufen
- ich werde evtl. bibliotheken verwenden, die es nur für c++ gibt.


Danke im Voraus.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 19.07.2007 um 19:12 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2007, 19:34 Uhr
BoBtheREapER
kein job für nen BoB


ich galube du kannst nicht bei allen kompilern c++ klassen definitionen in der c++ datei machen. was du aber machen kannst ist die funktionsimplementierungen direkt in die header datein reinschreiben. allerdings muss ich dich warnen das ganze wird sehr schnell sehr unübersichtlich.
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2007, 19:43 Uhr
xXx
Devil


Was hast du denn für einen Compiler, das der das erlaubt ?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2007, 19:46 Uhr
Blubber2063



Naja gehen tut das schon, aber spätestens wenn ein Modul von 2 anderen Modulen benötigt wird knallt dir der Linker das um die Ohren(Templates natürlich ausgeschlossen), Grund:
in beiden Modulen wird Code für die Klassen erzeugt und der Linker hat mehrere Auswahlmöglichkeiten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.07.2007, 20:01 Uhr
0xdeadbeef
Gott
(Operator)


Selbst wenn es möglich wäre - und das ist es in vielen Fällen nicht - ist es eine verdammt blöde Idee, egal ob nun Open Source oder nicht. Es zerstört dir deine gesamte Toolchain und macht das Projekt unglaublich unübersichtlich. Du musst jedesmal den gesamten Code neu kompilieren, weil es für den Compiler nur eine große Source-Datei ist. Früher oder später verlierst du den Überblick darüber, was du wann includet hast, oder läufst in eine Situation, in der zwei Klassen sich gegenseitig benötigen, und es hagelt dir ganz schnell Linkerfehler.

Ich hab so ein Projekt mal in C gesehen, und glaub mir, es war nicht schön. Am Ende konnte man den Code eigentlich nur noch wegwerfen und neu schreiben. In einer IDE konntest du den Kram schonmal garnicht benutzen, weil das Projekt nur etwa ein Zehntel der Source-Dateien beinhalten konnte, und als wir dann auf die Idee kamen, ein Versionskontrollsystem zu benutzen, flog das ganze endgültig auseinander. Lass solche Schweinereien bloß sein - cpp-Dateien zu #includen ist noch dreimal schlimmer als goto.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.07.2007, 20:28 Uhr
Lensflare



@ xXx
den compiler von visual studio 2005

@ BoBtheREapER, Blubber2063, 0xdeadbeef
ich hatte angenommen, dass es im gegenteil übersichtlicher wird, so wie es in java und c# ist.
Oder seid ihr der Meinung dass der java und c# code unübersichtlicher ist als c++ ? Ich finde es übersichtlicher.

zu den modulen, die mehrmals benötigt werden:
das kommt ja auch bei bei der Trennung von .h und .cpp vor. Da hab ich gelernt, das mit forward declaration zu lösen. Würde das nicht gehen, wenn man nur .cpp oder nur .h benutzt?

Wieso funktioniert das bei java und c# ? Liegt das daran, dass dort keine files includet werden, sondern pakete und namespaces?

Den Sinn von der Trennung von .h und .cpp hab ich noch nie so richtig verstanden.
Man hat mir gesagt, dass nur .cpp dateien kompiliert werden und .h nicht. die header könnte man dann weitergeben, damit man weiss, welche klassen und methoden es gibt und damit geheimhalten, was die methoden machen.
Aber wenn die header nicht kompiliert werden, wieso funktionieren dann inline methoden, die im header definiert sind?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.07.2007, 20:28 Uhr
Pablo
Supertux
(Operator)



Zitat von Lensflare:


Wenn man alles ohne header machen kann, dann würde ich das gerne machen, weil mir diese Aufteilung überflüssig erscheint... zumindest bei OpenSource-Projekten.





und was soll das bitte schön bringen außer Unübersichtlichkeit? Und wieso bei OpenSource?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.07.2007, 20:33 Uhr
Pablo
Supertux
(Operator)



Zitat von Lensflare:

Den Sinn von der Trennung von .h und .cpp hab ich noch nie so richtig verstanden.
Man hat mir gesagt, dass nur .cpp dateien kompiliert werden und .h nicht. die header könnte man dann weitergeben, damit man weiss, welche klassen und methoden es gibt und damit geheimhalten, was die methoden machen.


Unsinn, es hat mit Geheimhaltung nichts zu tun. Java/C# arbeiten anders als C/C++. Der C++ Compiler muss wissen, dass es eine Funktion foo geben muss, von Typ 'wasweißich' mit Parametern x,y, wenn die Funktion foo aufgerufen wird. Dem Compiler interessiert nicht, wie diese Funktion foo aussieht, er muss nur wissen, dass es sie gibt. Und genau dafür sind Header Datein, damit du dem Compiler sagst, welche Klassen, Varaiblen, Funktionen usw. vorhanden sind.

Erst der Linker wird sich darum kümmer, wo diese zu finden sind, deswegen übrgibt man bei Bibliotheken die Bib-binaries (.so, .dll, usw) und die Header Datein.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.07.2007, 21:55 Uhr
Lensflare



Wenn der header ausschließlich deklarationen enthalten würde, dann wäre es für mich verständlicher, aber oft macht man es ja so, dass man direkt im header eine methode definiert (inline?). Damit es übersichtlicher wird, oder? Besonders bei gettern und settern wäre es etwas umständlich und unübersichtlich die implementierung in .cpp zu machen.

Und ich frage mich nun, wieso man das nicht einfach bei allen Methoden macht.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 19.07.2007 um 21:58 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.07.2007, 21:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Lensflare:
Wenn der header ausschließlich deklarationen enthalten würde, dann wäre es für mich verständlicher, aber oft macht man es ja so, dass man direkt im header eine methode definiert. Damit es übersichtlicher wird, oder? Besonders bei gettern und settern wäre es etwas umständlich und unübersichtlich die implementierung in .cpp zu verlagern.



das macht normalerweise nur dann wenn die Funktionen nur ein bis zwei Zeilen enthalten.


Zitat:

Und ich frage mich nun, wieso man das nicht einfach bei allen Methoden macht.

Weil wenn du den Header sagen wir in 10 anderen Dateien benutzt er bei jeder kleinen Implementierungsänderung diese alle neu übersetzen muss. Wenn du im Header dagegen nur die Deklarationen drin hast, kompiliert er die zugehörige cpp einmal neu und gut ist.
--
class God : public ChuckNorris { };

Dieser Post wurde am 20.07.2007 um 11:39 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: