Wie macht man die Headers richtig?

Dieses Thema im Forum "C/C++" wurde erstellt von Cruz, 14.01.2009.

  1. Cruz

    Cruz No Bullshit

    Dabei seit:
    30.08.2005
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    Bonn
    Einen hab ich noch. :)

    Als Java Programmierer kann ich mich mit den Header Files von C++ nur schwer anfreunden. Ich habe noch nicht wirklich begriffen, warum es sie gibt und wie man es am besten macht.

    Einserseits höre ich die Aussagen von Freunden, die sagen, dass man im Header nur das public interface einer Klasse definieren sollte. Sie sind dafür da, dass man eine Header Datei + die kompilierte Klasse verteilen kann und man nicht immer Source Code mitgeben muss.

    Anderseits sehe ich in Beispielen, dass die Felder einer Klasse im Header deklariert sind und das geht gegen die erste Aussage, denn die Felder selbst gehören bestimmt nicht zum public interface. Aber in diesen Beispielen gibt es gar keine Klassendefinition class Name {} in der cpp Datei, also gäbe es ja gar keine andere Möglichkeit, als die Felder im Header zu definieren. Wie macht man es also richtig?

    Und noch eine Detailfrage dazu. In Java pflege ich die primitiven Felder der Klassen direkt bei der ersten Deklaration mit einem default Wert zu initialisieren, damit man nicht jedes Feld auch noch im Konstruktor extra aufführen muss. Kann ich das in C++ auch so handhaben?

    Viele Dank
    Cruz
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 15.01.2009
    Zuletzt bearbeitet: 15.01.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    Der Hauptgrund fuer die Existenz von Headerdateien ist, dass Variablen, Funktionen und Klassen in C++ deklariert werden muessen, bevor sie benutzt werden koennen. Und damit du die Deklaration nicht jedes Mal von Hand machen musst wenn eine Klasse oder Funktion gebraucht wird, schreibst du die Deklaration in eine Headerdatei. Dann musst du nur noch die Headerdatei einbinden, um die gewuenschte Funktion (etc.) benutzen zu koennen.

    Wie man es am Besten macht... Ich denke das ist Geschmacksache, und haengt teilweise auch von der konkreten Anwendung ab. Worueber man sich im klaren sein sollte, ist dass jegliche Implementation die man in eine Headerdatei schreibt, automatisch "inline" ist. D.h. fuer eine Methode die man direkt in der Headerdatei implementiert, wird, wo immer diese Methode aufgerufen wird, der Code der Methode dupliziert. Ueber die Vor- und Nachteile will ich hier nicht Philosophieren, dafuer habe ich selber etwas zu wenig Ahnung von der Materie. Zumal meine Erfahrungen damit auch meiner Intuition wiedersprechen.

    Das ist nicht ganz falsch, aber statt Interface wuerde ich von der Klassen Definition sprechen.

    Ja, wenn man von der korrekten Definition des Begriffs Interface ausgeht, stimmt das wohl. Wie oben gesagt, ich wuerde eher von der Klassen Definition sprechen. Ich weiss gar nicht genau ob man gezwungen ist die Variablen Definition in der Klassen Deklaration selbst zu machen, aber ich glaube schon. In der Praxis kann ich mich nicht daran erinnern das jemals anders gesehen zu haben. Aber vielleicht weiss jemand Anderes hier mehr darueber.

    Ich glaube man kann "von aussen" den "Scope" der Variablen nicht mehr festlegen, weswegen ich vermute dass die Deklaration tatsaechlich in der Klassen Deklaration geschehen muss.

    Aber das hier:
    ist nicht ganz richtig, denn wenn das stimmen wuerde, muesstest du die Implementation ja auch direkt in den Header schreiben. Du kannst von aussen durchaus via Angabe des Namespaces auf Methoden und Variablen zugreifen, was z.B. fuer Methoden und statische Variablen normalerweise gemacht wird:
    Code:
    // CClassName.cpp
    void ClassName::printBar(){ std::cout << "bar"; }
    ClassName::myVar = new Var()
    
    Gute Frage, naechste Frage. ;)
    Ist schon wieder so lange her dass ich was in C++ geschrieben hab... Konkret muesste ich das auch wieder nachlesen, ich meine aber dass das in C++ nicht geht. Variablen kannst du im Konstruktor unter anderem auch so initialisieren:
    Code:
    class Foo()
    {
    private:
       int myInt;
       double myDouble
    public:
       Foo() : myInt(10), myDouble(0.3) // myInt = 10, myDouble = 0.3
       {
          // constructor goes here
       }
    };
    
    Aber ansonsten wuerde ich sagen, probier doch einfach mal aus ob die Java Variante auch funktioniert. ;)

    mfg,
    bytepool
     
Thema:

Wie macht man die Headers richtig?

Die Seite wird geladen...

Wie macht man die Headers richtig? - Ähnliche Themen

  1. Google Chrome macht das halbe Hundert voll

    Google Chrome macht das halbe Hundert voll: Chrome 50 wurde in den stabilen Release-Kanal übernommen und will die Ladezeiten von Webseiten mit einer Preload-Funktion verbessern. Weiterlesen...
  2. OpenMandriva macht sich von ROSA unabhängig

    OpenMandriva macht sich von ROSA unabhängig: Das OpenMandriva-Projekt betreibt jetzt unabhängige Build-Server und ist damit komplett eigenständig. Auch eine Server-Distribution ist in Arbeit....
  3. Let' s Encrypt macht Fortschritte

    Let' s Encrypt macht Fortschritte: Das Projekt »Let's Encrypt«, das die Anzahl verschlüsselter Webseiten erhöhen will, indem es kostenfreie, sich automatisch installierende und...
  4. Canonical macht Markenrichtlinien GPL-konform

    Canonical macht Markenrichtlinien GPL-konform: Nach langen Verhandlungen mit der Free Software Foundation und der Software Freedom Conservancy hat Canonical seine Markenrichtlinien so...
  5. Opensuse macht einen Sprung: Opensuse Leap 42

    Opensuse macht einen Sprung: Opensuse Leap 42: Das Opensuse-Entwicklerteam hat sich auf den Namen und die Versionsnummer der nächsten Ausgabe der Distribution geeinigt. Demnach dürfen die...