Frage zu Headerdateien
Geizhals » Forum » Programmierung » Frage zu Headerdateien (13 Beiträge, 14 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: Frage zu Headerdateien
Fly
01.11.2002, 18:35:35
Diese Zeilen hast häufiger in headerdateien. Dazu mal ein paar Takte dazu, wozu diese Dinger da sin.

Header sind im Endeffekt einfache Codedateien. Diese werden durch eine #include Anweisung in den Code "hineinkopiert", bevor der Compiler es übersetzt.

Jetzt kann's natürlich sein, dass sich da einige Header in die Quere kommen. Oder, dass Du eine eigene Funktion definieren willst, die zum Bruchrechnen geeignet ist. Trotzdem willst die Headerdatei, in der das Bruchrechnen steht, inkluden, weil da drin auch noch was anderes steht, was Du brauchst.

Auch könnt's Dir passieren, dass Header-Dateien andere Header enthalten. Wenn jetzt 2 Header, die Du inkludierst, die gleichen Header inkludieren (was häufig der Fall ist), hättest eine Doppeldeklaration der Funktionen darin und der Compiler spuckt Dir's zurük.

Daher gibt's die #ifdefs und #ifndefs.

Eine #ifndef bedeutet im Endeffekt "Wenn die Konstante, die bei mir steht nicht existiert, ignorier' den rest bis zum #endif".

Daher passiert da folgendes:

Es wird nachgeschaut, ob __BRUCH_H  schon existiert, also ob's schon mal inkludiert wurde. Falls ja, wird alles bis #endif ignoriert. Falls nein, wird's definiert (damit's beim nächsten inkludieren ignoriert wird) und die Funktionen werden in Deinen Quellcode übernommen.

________________________________________________________________________
Linux is like a Vorlon.  It is incredibly powerful, gives terse,
cryptic answers and has a lot of things going on in the background.
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
..
Re(2): Frage zu Headerdateien
03.11.2002, 21:52:21
zu 1. noch ein beispiel:

angenommen, du hast eine klasse "Fortbewegungsmittel", von der die klassen "Auto", "Flugzeug" und "Schiff" abgeleitet sind.
all diese abgeleiteten klassen haben die methoden "beladen" und "entladen" - die aber komplett verschieden implementiert sein können.

du hast ein programm, in dem viele objekte aller 3 abgeleiteten klassen bunt durchgewürfelt gespeichert sind (in einer liste, einem array, whatever). du willst jetzt alle objekte durchgehen und jeweils die methode "beladen" aufrufen.

ohne virtuelle funktionen müsstest du in deinem programm jedesmal zuerst herausfinden, um welche klasse es sich handelt, und dann die methode dieser klasse aufrufen. das ist extrem umständlich, erzeugt viele zeilen unnötigen code und entspricht nicht dem prinzip der OOP.

wenn du aber in der mutterklasse die gemeinsamen methoden als "virtual" deklarierst, macht dir das system die typunterscheidung zur laufzeit. (d.h. du musst nicht selbst umständlich typechecking machen.)
mit virtuellen funktionen würde das beispiel so aussehen (syntax ist C# - aber der sinn sollte klar sein)

foreach (Fortbewegungsmittel myFBM in myList)
{
    myFBM.beladen();   // system überprüft, welches objekt vorliegt und ruft die
                                 // memberfunktion der entsprechenden klasse auf
}

dasselbe bsp ohne virtuelle funktionen (möglicherweise auch noch bei mehr abgeleiteten klassen) erzeugt zig zeilen code..



Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung