2 Fragen
-
Hallo Community,
Ich beschäftige mich nun schon ein paar Wochen mit C++ und bin nun dabei, mich mit dem Thema Klassen näher zu beschäftigen. Ich würde gerne wissen, ob ich bei der Erstellung einer Instanz (Aufruf des Konstruktors) "Cclass class;" oder "Cclass *class = new Cclass();" verwenden sollte und beim Aufruf einer Methode "objekt.methode();" oder "objekt->methode();". Oder kann dies ganz nach Vorliebe des Autors definiert werden? Meine 2. Frage wäre, ob es unsauber ist, sämtliche Headerdateien in einer gesonderten "headers.h" zu inkludieren.
Danke für Antworten
-
ganz nach Vorliebe des Autors nicht ganz, eher nach Verwendungszweck und den Vor- und Nachteilen der beiden Alternativen.
Frage wäre, ob es unsauber ist ,[...] Ja
-
EinUser schrieb:
ob ich bei der Erstellung einer Instanz (Aufruf des Konstruktors) "Cclass class;" oder "Cclass *class = new Cclass();" verwenden sollte und beim Aufruf einer Methode "objekt.methode();" oder "objekt->methode();".
Du sollst immer
Cclass class;nehmen, außer du hast einen wirklich guten Grund fürCclass *class = new Cclass();. Damit ist auch die Frage geklärt, wie du eine Methode auzurufen hast.
Der einzig wirklich gute Grund fürCclass *class = new Cclass();ist, wenn du du ein Objekt über den Scope hinaus am Leben erhalten musst. Und dann kapselst du das Ganze auch in einem Smartpointer, und machst es nicht auf die rohe Art und Weise.EinUser schrieb:
Meine 2. Frage wäre, ob es unsauber ist, sämtliche Headerdateien in einer gesonderten "headers.h" zu inkludieren.
Auf jeden Fall, weil du immer nur exakt die Header inkludieren sollst, die dein Quellcode wirklich braucht. Kein Quellcode braucht alle Headerdateien. Und noch besser ist es, wenn du in Headerdateien eine
forward declarationbenutzt, falls möglich, anstatt den Header zu inkludieren.
-
Auf jeden Fall, weil du immer nur exakt die Header inkludieren sollst, die dein Quellcode wirklich braucht. Kein Quellcode braucht alle Headerdateien.
Warum wird dies dann beispielsweise von Visual C++ 2010 in der Vorlage zum Erstellen von Win32 -Anwendungen so gemacht? ("stdafx.h")
-
EinUser schrieb:
Auf jeden Fall, weil du immer nur exakt die Header inkludieren sollst, die dein Quellcode wirklich braucht. Kein Quellcode braucht alle Headerdateien.
Warum wird dies dann beispielsweise von Visual C++ 2010 in der Vorlage zum Erstellen von Win32 -Anwendungen so gemacht? ("stdafx.h")
Ich sehe das als ein fail von MS an, zusätzliche Optionen als must-have einzustufen. Meiner Meinung nach sollte die Option "use precompiled header" standardmäßig deaktiviert sein.