mikrocontroller.net

Forum: PC-Programmierung C++ code im header richtig?


Autor: MaXXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey leute,

bin in managed C++ programmierung gestossen worden. also arbeite ich zur 
zeit mit Visual Studio.

meine frage: wie die konvention bei C++, darf man code in den header 
schreiben ?

folgendes problem: ich habe ein startformular (Bsp. Form1). laut VS ist 
Form1 eine header datei. allerding werde ja hier die Objekte erstellt , 
die in der Form1 enthalten sind (wie TextBox & Co.). ich muss mit diesen 
Objekten arbeiten, also bleibt nichts anderes übrig , wie in den header 
von Form1 zu schreiben oder?


MFG MaXXX

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C++ ist es durchaus gebräuchlich, triviale Implementierungen von 
Funktionen in der Headerdatei anzulegen. Bei Code mit inline-Attribut 
muss das sogar so gemacht werden.

Außer in diesem Fall ist es aber nicht erforderlich, das von C her 
gewohnte Schema Deklaration -> .h / Definition -> .c kann hier 
beibehalten werden.

Bei der Definition von Memberfunktionen einer Klasse muss der 
Klassenname mit :: als Separator vor den Funktionsnamen gesetzt werden.

Ist in einer Klasse bla eine Funktion foo deklariert, wie 
beispielsweise hier:
class bla
{
  // ...
  int foo();
  // ...
};

dann sieht die Definition so aus:
int bla::foo()
{
  // ...
}

Als Dateinamensschema hat sich die Verwendung je eines Paares 
.cpp/.h-Dateien pro Klasse mit dem Klassennamen als Dateinamen als 
praktikabel erwiesen.

Obiges Beispiel bestünde also aus bla.h und bla.cpp

Microsoft verwendet in seinen C++-Varianten die präfixorientierte 
ungarische Notation und hängt ein großes C vor den Klassennamen. Das ist 
dann nicht Dateinamensbestandteil.
Eine Klasse CFoo wird dann in Foo.h / Foo.cpp abgelegt.

Autor: MaXXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die schnelle antwort

mfg

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Microsoft verwendet in seinen C++-Varianten die präfixorientierte
> ungarische Notation und hängt ein großes C vor den Klassennamen. Das ist
> dann nicht Dateinamensbestandteil.

Das trifft vor allem auf alten Code zu, der mit der MFC arbeitet. In 
moderneren Versionen verwendet Microsoft bei Klassennamen kein C-Präfix 
mehr.

Autor: MaXXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ist es ok in der datei Form1.h so was rein zuschreiben ?
z.B. für ein ActionListener eines buttons

ActionListener button{
   String^ info;

   info = this->textbox->text;

   ... code...

   mehr code ...

   this->textbox2->text("bla")

   ... noch mehr code...


}

ist natülich pseudocode ^^


mfg

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein C++, sondern eine von Microsoft erfundene Perversion namens 
"Managed C++".

Wenn das von Dir erwähnte Codeschnipselchen innerhalb einer 
Klassendeklaration steht, dann kann man das tatsächlich so machen.

Ob das jetzt übersichtlicher ist, ist hingegen eine ganz andere 
Angelegenheit.

Autor: Der Unbekannte #2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm C#, wirste glücklicher und auch glücklich. Ist easy und solche 
Fragen stellen sich gar nicht erst.

Autor: Matthias D. (marvin42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Nimm C#, wirste glücklicher und auch glücklich.
>> Ist easy und solche Fragen stellen sich gar nicht erst.

Ja, und weil das so ist programmiert auch kaum noch einer in C/C++ :-) - 
dazu empfehle ich "Enough Rope to Shoot Yourself in the Foot: Rules for 
C and C++ Programming (Unix/C)" von Allen Holub.

Merkwürdigerweise ist C/C++ Code oftmals weniger fehlerbehaftet als ein 
C#- oder Java-Code, weil C-Programmierer wegen dieser "Mankos" gehalten 
sind, genauer über ihren Code nachzudenken - und sich nicht auf 
GarbageCollections und ähnliche Gadgets verlassen können

Aber zum Thema:
In unserer Softwareabteilung galt die Meinung, dass die H-Datei eine 
gewisse öffentliche Funktion hat, schliesslich wird diese per #include 
woanders eingebunden. Daher sollte man dort keinen Code einbauen, den 
man nicht auch bewusst unter diesem Blickwinkel haben will.
Das ist nicht wirklich eine technische Entscheidung sondern eher eine 
Frage der Einstellung zum Code. Genauso gibt es immer Leute, die sich 
beklagen, dass man H-Dateien nicht immer fröhlich und ohne Nebeneffekte 
bunt durcheinander includen darf - bei einem ordentlichen Design hat man 
diese Probleme eigentlich nicht

Autor: MaXXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke @all.

der wechsel zur C# ist schwer, da der code schon ordentlich laaaaaang 
ist :)

also ich bin auch nicht glücklich mit code im header, aber hier werde 
viel objekte im header automatisch von MS erzeugt, müsste ja den 
gaaaaaaaanzen haufen übergeben, also schreibe ich lieber weiter in den 
header ^^


mfg

Autor: pst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code im Header wird zum Beispiel auch dann problematisch, wenn es um 
Bibliotheken geht - dann landen Teile des Bibliothekscodes in der 
Applikation, andere Teile landen in der Bibliothek selbst. Wird die 
Bibliothek ausgetauscht ohne die Applikation neu zu uebersetzen, passen 
beide Teile mitunter nicht mehr zusammen, ohne, dass das bemerkt wird. 
Hoert sich bescheuert an, ist es auch, passiert aber oft genug.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.