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 <
010
19.07.2007, 21:59 Uhr
mischa
Fragender



Zitat:
Aber wenn die header nicht kompiliert werden, wieso funktionieren dann inline methoden, die im header definiert sind?

Inline Methoden sind sowas wie Makros. Sie werden einfach in den Aufrufsort hineinkopiert und dann dort übersetzt. Manche Funktionen sind so simpel das ihr Aufruf komplizierter ist als sie selbst und dann werden inline Funktionen verwendet.
p.s.
ich hoffe ich hab jetzt kein schmarn gelabert
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
19.07.2007, 22:00 Uhr
Lensflare




Zitat von FloSoft:
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.

also macht man das nur, damit das kompilieren schneller geht?
--
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 22:01 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
19.07.2007, 23:47 Uhr
0xdeadbeef
Gott
(Operator)


Nicht nur. Es ist außerdem so, dass die Sprachstruktur es nicht sinnvoll anders erlaubt. Jedes Modul kennt nur das, was im entsprechenden Modul drin ist - die werden einzeln kompiliert. Bei Java zum Beispiel ist das nicht der Fall, der benutzt .class-Dateien wie Header. Außerdem sind Objekte in Java und C# immer Referenztypen, was wieder seine ganz eigenen Probleme mit sich bringt - zum Beispiel, dass Destruktoren nutzlos werden, weil du nicht weißt, wann sie ausgeführt werden (Liegt halt alles auf dem Heap), und generell werden Symbole da erst zur Laufzeit aufgelöst (Was widerum dazu führt, dass du sehr wenig zur Compilezeit abfangen kannst - siehe NoSuchMethodError).

Was das bedeutet ist, dass ein Java- bzw. C#-Compiler zur Laufzeit weniger wissen muss - der Klassenaufbau selbst ist zum Beispiel nicht notwendig, um einen Zeiger anzulegen, aber wenn du eine flache Instanz anlegen willst, wie in C++ üblich, musst du wissen, wie viel Speicher das Ding nachher belegt. Außerdem musst du den Aufbau kennen, weil die Symbole zur Compilezeit bereits aufgelöst werden. Die Namen der Membervariablen sind im Binärcode nachher nicht mehr enthalten und wurden durch offsets ersetzt, ähnliches gilt für die Auflösung der virtual function table etc. Und jetzt stell dir vor, Klasse A hat einen Member vom Typ B, und Klasse B hat eine Methode, die intern ein Objekt der Klasse A benutzt. Ohne Deklarationen kriegst du da ein Henne-Ei-Problem.

Außerdem, und deutlich wichtiger, hat die Aufspaltung in Module schon ihren Sinn - sie macht die Dinge übersichtlicher und den Code wiederverwendbarer. Stell dir vor, du willst Klasse C in zwei verschiedenen Projekten benutzen. Jedesmall kucken, wo du jetzt wie und unter welchen Umständen den Kram #includen kannst? Ich denke nicht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
19.07.2007, 23:55 Uhr
Suba Esel




Zitat von 0xdeadbeef:

Stell dir vor, du willst Klasse C in zwei verschiedenen Projekten benutzen. Jedesmall kucken, wo du jetzt wie und unter welchen Umständen den Kram #includen kannst?


Dafür muss man das dann aber ins Projekt einfügen, oder?
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
20.07.2007, 00:52 Uhr
Lensflare



Ich glaube, ich verstehe es so langsam
Danke für die ausführlichen Erklärungen.
--
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
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: