C++ immer Klassen oder auch Module?

Gast #5830524
Lesenswert?
• ▲
▼
Hallo,
In C++ sollte ich da immer alles in ein Klassenkorsett zwängen oder ist 
es auch gängige praxis Funktionen in einem Modul zu definieren und ihre 
Prototypen in einer Header Datei aufzuführen.

Also alles was diesen Header includiert, kann auf die Funktionen im 
Modul zugreifen.

Genauso könnte ich das auch in einer Klasse umsetzen. Klassendeklaration 
und Definition.

Die Frage ist also immer alles in Klassen quetschen oder gehen auch 
Module.
Gast #5830562
Lesenswert?
• ▲
▼
Der Begriff "Modul" ist in C++ noch in der Ausarbeitung, du meinst 
vermutlich einen Namespace?

Dann ist es Geschmacksache. Leute, die aus der Java-Welt kommen, packen 
alle Funktionen als Memberfunktion in eine Klasse, weil es in Java gar 
keine Funktionen gibt, sondern nur Methoden (der dortige Begriff für 
Memberfunktion).

In C++ gibt es APIs mit beiden Varianten. In der STL sind die 
Algorithmen beispielsweise außerhalb der Klassen implementiert, z.B. 
for_each(...vector...) statt vector::for_each.

Ich persönlich mache es so: In eine Klasse gehört alles, was den Zustand 
der Klasse betrifft, d.h. Funktionen, die Membervariablen ändern oder 
benötigen. In den Namespace kommen Funktionen, die mithilfe der Klasse 
und ihrer Memberfunktionen höhere Aufgaben erledigen können.

Beispiel: Es gibt eine Klasse HTTPClient, die sich um HTTP-Funktionen 
kümmert. Diese sind zustandsbehaftet, z.B. für Authentifizierung und 
Cookies. Eine Funktion "download", die den Inhalt einer URL in eine 
Datei schreibt, würde ich dann nicht in diese Klasse packen, sondern so: 
download(url, file, client = Client()). Das macht auch das Testen 
einfacher, weil "client" in dem Fall ein Interface ist, das beim Testen 
durch einen Stub oder Mock ersetzt werden kann.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.