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
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:
1 | class bla |
2 | {
|
3 | // ...
|
4 | int foo(); |
5 | // ...
|
6 | };
|
dann sieht die Definition so aus:
1 | int bla::foo() |
2 | {
|
3 | // ...
|
4 | }
|
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.
> 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.
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
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.
Nimm C#, wirste glücklicher und auch glücklich. Ist easy und solche Fragen stellen sich gar nicht erst.
>> 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
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.